Compare Revisions

The credentials to download the source code are:
 Username: svnusers
 Password: svnusers

Ignore whitespace Rev 470 → Rev 471

/tags/v1.6.0/LibSip_PIXITS.ttcn
File deleted
Property changes:
Deleted: svn:keywords
## -1 +0,0 ##
-Id
\ No newline at end of property
Index: v1.6.0/LibSip_Interface.ttcn
===================================================================
--- v1.6.0/LibSip_Interface.ttcn (revision 470)
+++ v1.6.0/LibSip_Interface.ttcn (nonexistent)
@@ -1,184 +0,0 @@
-/*
- * @author STF 346, STF366, STF368, STF369
- * @version $Id$
- * @desc This module provides the types used by the test component
- * for SIP-IMS tests. Module become from STF306 and STF334-336
- */
-
-module LibSip_Interface language "TTCN-3:2005"//MRO
-{
- //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;
-
- group AdressTypes
- {
- type record address4SIP
- {
- //HostPort
- charstring host optional, // hostname, IPv4 or IPv6
- integer portField optional // represented as an integer
- } with { encode "SIPCodec" }
-
- 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
-
- type component SipComponent
- {
- //port
- port SipPort SIPP;
- // used for communication with the operator
- port operatorPort opPort;
-
- // 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 RecordRoute vc_recordRoute; // value of RecordRoute header
- var boolean vc_boo_recordRoute := false; // boolean indicates valid recordRoute
- var Route vc_route; // value of Route header
- var 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
-
- 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 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 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;
-
- 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_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 v_white_space := false;//MRO
-
- // ETS address
- var address v_ets_label := { host := PX_SIP_TS1_IPADDR, portField := PX_SIP_TS1_PORT};
-
- // 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;
-
- } // end SipComponent
-
-} // end module LibSip_Interface
/v1.6.0/LibSip_Interface.ttcn
Property changes:
Deleted: svn:keywords
## -1 +0,0 ##
-Id
\ No newline at end of property
Index: v1.6.0/LibSip_SIPTypesAndValues.ttcn
===================================================================
--- v1.6.0/LibSip_SIPTypesAndValues.ttcn (revision 470)
+++ v1.6.0/LibSip_SIPTypesAndValues.ttcn (nonexistent)
@@ -1,1824 +0,0 @@
-/**
- * @author STF 346, STF366, STF368, STF369
- * @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
- * @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 language "TTCN-3:2005"//MRO
-{
- // Lib Common
- import from LibCommon_TextStrings {const c_CRLF};
- // SipAts
- import from LibSip_SDPTypes all;
- import from LibSip_XMLTypes all;
-
-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";
-
- // 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";
-
- // MIME name application
- const charstring c_mimeMultipart := "multipart/mixed";
-
- // IMS 3GPP name application
- const charstring c_ims3gppAplication := "application/3gpp-ims+xml";
-
- // IMS 3GPP name CW application
- const charstring c_ims3gppCwApplication := "application/vnd.3gpp.cw+xml";
-
- // IMS ETSI name MCID application
- const charstring c_imsEtsiMcidApplication := "application/vnd.etsi.mcid+xml";
-
- // IMS ETSI name CUG application
- const charstring c_imsEtsiCugApplication := "application/vnd.etsi.cug+xml";
-
- // 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";
-
- // PLAIN-TEXT name application
- const charstring c_plainText := "text/plain";
-
- //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"&
- c_CRLF;
-
-
- // 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";
-
- // ([RFC3891]Sec 6.1)
- const charstring c_earlyFlag := "early-only";
-
- // 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";
-
- // 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";
-
- // @ (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);
-
- // * (wildchard) sign
- const charstring c_WILDCARD := "*";
-
- const integer c_CRlen := 2; // length of new line (0d0a)
-
- 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"}
-
-
-} //end group SimpleConstants
-
-group AuthorizationConstants {
-
- const charstring c_ik := "";
- const charstring c_ck := "";
- const charstring c_algorithm := "MD5";
- 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";
-
-} //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,
- 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,
- userInfo := omit ,
- hostPort := {host:="127.0.0.1", portField:=c_defaultSipPort},
- urlParameters := omit,
- headers := omit
- };
-
- const SipUrl c_unavailableUri :=
- {
- scheme := c_sipScheme,
- 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,
- 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
- }
- }};
-
-
-}
-
-
-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 long"};
- 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 doesnot 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 timeout"};
- const StatusLine c_statusLine505 := {c_sipNameVersion, 505, "Version not supported"};
- const StatusLine c_statusLine513 := {c_sipNameVersion, 513, "Message too long"};
- 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,
-
- // [3326]
- REASON_E,
-
- // [3515] - REFER method
- REFER_TO_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,
-
- // [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
-
- }
-
- // [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
- }
-
- // [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]
-
-
-/**
- *
- * @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 SipUrl
- {
- charstring scheme, // e.g "sip" or "tel"
- UserInfo userInfo optional,
- HostPort hostPort optional,
- SemicolonParam_List urlParameters optional,
- AmpersandParam_List headers optional
- }
-
- // [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;
-
- type Addr_Union PAssertedIDValue;
-
- type record of PAssertedIDValue PAssertedIDValue_List;
-
- type charstring PAssertedServiceValue;
-
- type Addr_Union PPreferredIDValue;
-
- type record of PPreferredIDValue PPreferredIDValue_List;
-
- type charstring PrivacyValue;
-
- type record of PrivacyValue PrivacyValue_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
-
- group RFC3265HeaderFieldTypes
- {
- // [3265/7.2]
- type record AllowEvents {
- FieldName fieldName(ALLOW_EVENTS_E),
- EventType_List eventTypes
- }
-
- type set of EventType EventType_List;
- type charstring EventType;
-
- // [3265/7.2]
- type record Event {
- FieldName fieldName(EVENT_E),
- EventType eventType,
- SemicolonParam_List eventParams optional
- }
-
- // [3265/7.2]
- type record SubscriptionState {
- FieldName fieldName(SUBSCRIPTION_STATE_E),
- SubState subState,
- SemicolonParam_List substateParams optional
- }
-
- type charstring SubState;
- }//end group RFC3265HeaderFieldTypes
-
- group RFC3313HeaderFieldTypes
- {
- // [3313/5]
- type record PMediaAuthorization {
- FieldName fieldName(P_MEDIA_AUTHORIZATION_E),
- PMediaAuthorization_List pMediaAuthorizations
- }
-
- type charstring PMediaAuthValue; //HEXDIG "0"-"9", "A"-"F"
-
- type record of PMediaAuthValue PMediaAuthorization_List;
-
- }//end group RFC3265HeaderFieldTypes
-
- group RFC3323HeaderFieldTypes
- {
- // [3323]
- type record Privacy {
- FieldName fieldName(PRIVACY_E),
- PrivacyValue_List privValueList
- }
- }//end group RFC3323HeaderFieldTypes
-
- group RFC3325HeaderFieldTypes
- {
- // [3325]
- type record PAssertedID {
- FieldName fieldName(P_ASSERTED_ID_E),
- PAssertedIDValue_List pAssertedIDValueList
- }
-
- // [3325]
- type record PPreferredID {
- FieldName fieldName(P_PREFERRED_ID_E),
- PPreferredIDValue_List pPreferredIDValueList
- }
- }//end group RFC3325HeaderFieldTypes
-
- group RFC3326HeaderFieldTypes
- {
- //[3326]
- type record of ReasonValue ReasonValues;
-
- type record ReasonValue {
- charstring token,
- SemicolonParam_List reasonParams optional
- }
-
- type record Reason {
- FieldName fieldName(REASON_E),
- ReasonValues reasonValues
- }
- }//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 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),
- 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
- }
- }// end group RFC3841HeaderFieldTypes
-
- 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
-
- 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
- }
- }//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
- }
-
- } // 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,
- 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
- 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,
- ReferredBy referredBy optional, // 3892 - REFER method
- ReferTo referTo optional, // 3515 - 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
- 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
- } 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"}
-
- type record INVITE_Request {
- RequestLine requestLine,
- MessageHeader msgHeader,
- MessageBody messageBody optional,
- Payload payload optional
- } with { encode "SIPCodec"}
-
- type record OPTIONS_Request {
- RequestLine requestLine,
- MessageHeader msgHeader,
- MessageBody messageBody optional,
- Payload payload optional
- } with { encode "SIPCodec"}
-
- type record BYE_Request {
- RequestLine requestLine,
- MessageHeader msgHeader,
- MessageBody messageBody optional,
- Payload payload optional
- } with { encode "SIPCodec"}
-
- type record CANCEL_Request {
- RequestLine requestLine,
- MessageHeader msgHeader,
- MessageBody messageBody optional,
- Payload payload optional
- } with { encode "SIPCodec"}
-
- type record ACK_Request {
- RequestLine requestLine,
- MessageHeader msgHeader,
- MessageBody messageBody optional,
- Payload payload optional
- } with { encode "SIPCodec" }
-
- // [3262/7.1]
- type record PRACK_Request {
- RequestLine requestLine,
- MessageHeader msgHeader,
- MessageBody messageBody optional,
- Payload payload optional
- } with { encode "SIPCodec" }
-
- // [3265/7.1]
- type record NOTIFY_Request {
- RequestLine requestLine,
- MessageHeader msgHeader,
- MessageBody messageBody optional,
- Payload payload optional
- } with { encode "SIPCodec" }
-
- // [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" }
-
- // [3311/7]
- type record UPDATE_Request {
- RequestLine requestLine,
- MessageHeader msgHeader,
- MessageBody messageBody optional,
- Payload payload optional
- } with { encode "SIPCodec" }
-
- //
- type record REFER_Request {
- RequestLine requestLine,
- MessageHeader msgHeader,
- MessageBody messageBody optional,
- Payload payload optional
- } with { encode "SIPCodec"}
-
- //
- type record MESSAGE_Request {
- RequestLine requestLine,
- MessageHeader msgHeader,
- MessageBody messageBody optional,
- Payload payload optional
- } with { encode "SIPCodec" }
-
- //
- type record INFO_Request {
- RequestLine requestLine,
- MessageHeader msgHeader,
- MessageBody messageBody optional,
- Payload payload optional
- } with { encode "SIPCodec"}
-
-
- } //with { encode "SIPCodec" }// 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
- } with { encode "SIPCodec"}
- } //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
-
- group MessageBodyTypes
- {
- 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)
- };
-
- } // end group MessageBodyTypes
-
- group MIMETypes
- {
- group SubMIMETypes
- {
-
- 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
- }
- }//end group SubMIMETypes
-
- group MessageTypes {
-
- type record MIME_Message {
- charstring boundary, // len:
- MimeEncapsulatedList mimeEncapsulatedList
- }
-
- type record of MIME_Encapsulated_Part MimeEncapsulatedList;
-
- } // group MessageTypes
- } // group MIMETypes
-
- }// end group MSGTypes
-}// end group Types
-
-} // end module LibSip_TypesAndValues
/v1.6.0/LibSip_SIPTypesAndValues.ttcn
Property changes:
Deleted: svn:keywords
## -1 +0,0 ##
-Id
\ No newline at end of property
Index: v1.6.0/LibSip_XMLTypes.ttcn
===================================================================
--- v1.6.0/LibSip_XMLTypes.ttcn (revision 470)
+++ v1.6.0/LibSip_XMLTypes.ttcn (nonexistent)
@@ -1,95 +0,0 @@
-/**
- * @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
- */
-module LibSip_XMLTypes language "TTCN-3:2009" {
-
-import from XSDAUX all;
-
- import from org_w3_www__XML_1998_namespace language "XSD" all
- with {
- extension "File:../xsd/xml.xsd"
- }
-
- import from ietf_params_xml_ns_common_policy language "XSD" all
- with {
- extension "File:../xsd/common-policy.xsd"
- }
-
- import from ietf_params_xml_ns_resource_lists language "XSD" all
- with {
- extension "File:../xsd/ResourceList.xsd"
- }
-
- import from org_etsi_uri__ngn_params_xml_simservs_xcap language "XSD" all
- with {
- extension "File:../xsd/SupplementaryServices.xsd"
- }
-
- import from org_etsi_uri__ngn_params_xml_simservs_mcid language "XSD" all
- with {
- extension "File:../xsd/MCID.xsd"
- }
-
- import from Ims3gpp language "XSD" all
- with {
- extension "File:../xsd/Ims3gpp.xsd"
- }
-
- import from ietf_params_xml_ns_conference_info language "XSD" all
- with {
- extension "File:../xsd/CONF.xsd"
- }
-
- import from org_etsi_uri__ngn_params_xml_simservs_pstn language "XSD" all
- with {
- extension "File:../xsd/PSTN.xsd"
- }
-
- import from org_etsi_uri__ngn_params_xml_comm_div_info language "XSD" all
- with {
- extension "File:../xsd/CDIVN.xsd"
- }
-
- import from oma_xml_xdm_common_policy language "XSD" all
- with {
- extension "File:../xsd/xdm_commonPolicy-v1_0.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_type, // if there is XML conf
- 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
- }
- }
-} /* end module LibSip_XMLTypes */
\ No newline at end of file
/v1.6.0/LibSip_XMLTypes.ttcn
Property changes:
Deleted: svn:keywords
## -1 +0,0 ##
-Id
\ No newline at end of property
Index: v1.6.0/XSDAUX.ttcn
===================================================================
--- v1.6.0/XSDAUX.ttcn (revision 470)
+++ v1.6.0/XSDAUX.ttcn (nonexistent)
@@ -1,150 +0,0 @@
-module XSDAUX language "TTCN-3:2005"{//MRO
- /* 0.anySimpleType */
- type anytype anySimpleType;
-
- /* 1.string */
- type charstring string;
-
- /* 2.boolean */
- type integer bitXSD (1, 0) ;
-
- type union booleanXSD {
- bitXSD bit, boolean bool
- }
-
- /* 3.decimal */
- type float decimal;
-
- /* 4.float */
- type float floatXSD;
-
- /* 5.double */
- type float double;
-
- /* 6.duration */
- type charstring duration;
-
- /* 7.dateTime */
- type charstring dateTime;
-
- /* 8.time */
- type charstring time;
-
- /* 9.date */
- type charstring date;
-
- /* 10.gYearMonth */
- type charstring gYearMonth;
-
- /* 11.gYear */
- type charstring gYear;
-
- /* 12.gMonthDay */
- type charstring gMonthDay;
-
- /* 13.gDay */
- type charstring gDay;
-
- /* 14.gMonth */
- type charstring gMonth;
-
- /* 15.hexBinary */
- type hexstring hexBinary;
-
- /* 16.base64Binary */
- type charstring base64Binary;
-
- /* 17.anyURI */
- type charstring anyURI;
-
- /* 18.QName */
- type charstring QName;
-
- /* 19.NOTATION */
- type charstring NOTATION;
-
- /* 20.normalizedString */
- type charstring normalizedString;
-
- /* 21.token */
- type charstring token;
-
- /* 22.language */
- type charstring languageXSD;
-
- /* 23.NMTOKEN */
- type charstring NMTOKEN;
-
- /* 24.NMTOKENS */
- type set of charstring NMTOKENS;
-
- /* 25.Name */
- type charstring Name;
-
- /* 27.NCName */
- type charstring NCName;
-
- /* 28.ID */
- type charstring ID;
-
- /* 29.IDREFS */
- type set of charstring IDREFS;
-
- /* 30.ENTITY */
- type charstring ENTITY;
-
- /* 31.ENTITIES */
- type set of charstring ENTITIES;
-
- /* 32.nonPositiveInteger */
- type integer nonPositiveInteger (- infinity .. 0) ;
-
- /* 33.negativeInteger */
- type integer negativeInteger (- infinity .. - 1) ;
-
- /* 34.long */
-// type integer long (- 9223372036854775808 .. 9223372036854775807) ;//MRO
-
- /* 35.int */
- type integer int (- 2147483648 .. 2147483647) ;
-
- /* 36.short */
- type integer short (- 32768 .. 32767) ;
-
- /* 37.byte */
- type integer byte (- 128 .. 127) ;
-
- /* 38.nonNegativeInteger */
- type integer nonNegativeInteger (0 .. infinity) ;
-
- /* 39.unsignedLong */
-// type integer unsignedLong (0 .. 18446744073709551615) ;//MRO
-
- /* 40.unsignedInt */
- type integer unsignedInt (0 .. 4294967295) ;
-
- /* 41.unsignedShort */
- type integer unsignedShort (0 .. 65535) ;
-
- /* 42.unsignedByte */
- type integer unsignedByte (0 .. 255) ;
-
- /* 43.positiveInteger */
- type integer positiveInteger (1 .. infinity) ;
-
- /* 44.integer */
- type integer integerXSD;
-
- /* 45.anyAttributes */
- type record of record {
- charstring name,
- charstring val
- } anyAttributes;
-
- /* 46. anyType */
- /**
- * This is to represent elements without a given type
- */
- type record anyType {
- }
-}
/v1.6.0/XSDAUX.ttcn
Property changes:
Deleted: svn:keywords
## -1 +0,0 ##
-Id
\ No newline at end of property
Index: v1.6.0/LibSip_SDPTypes.ttcn
===================================================================
--- v1.6.0/LibSip_SDPTypes.ttcn (revision 470)
+++ v1.6.0/LibSip_SDPTypes.ttcn (nonexistent)
@@ -1,310 +0,0 @@
-/**
- * @author STF 346, STF366, STF368, STF369
- * @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
- * @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 language "TTCN-3:2005"//MRO
-{
- group Constants
- {
- group SimpleConstants
- {
- // SDP net_type
- const charstring c_in := "IN";
-
- // SDP addr_type
- const charstring c_ip4 := "IP4";
-
- // SDP_media_desc: media
- const charstring c_audio := "audio";
- const charstring c_image := "image";
- const charstring c_video := "video";
-
- // SDP_media_desc: transport
- const charstring c_rtpAvp := "RTP/AVP";
- const charstring c_udptl := "Udptl";
-
- // SDP_attribute_list constants:
- const charstring c_local := "local";
- const charstring c_mandatory := "mandatory";
- const charstring c_none := "none";
- const charstring c_qos := "qos";
- const charstring c_remote := "remote";
- const charstring c_sendrecv := "sendrecv";
- 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
- }
-
- type record SDP_attribute_keywds {
- charstring attr_value
- }
-
- type record SDP_attribute_tool {
- charstring attr_value
- }
-
- type record SDP_attribute_ptime {
- charstring attr_value
- }
-
- type record SDP_attribute_recvonly {
- }
-
- type record SDP_attribute_sendrecv {
- }
-
- type record SDP_attribute_sendonly {
- }
-
- type record SDP_attribute_inactive {
- }
-
- type record SDP_attribute_orient {
- charstring attr_value
- }
-
- type record SDP_attribute_type {
- charstring attr_value
- }
-
- type record SDP_attribute_charset {
- charstring attr_value
- }
-
- type record SDP_attribute_sdplang {
- charstring attr_value
- }
-
- type record SDP_attribute_lang {
- charstring attr_value
- }
-
- type record SDP_attribute_framerate {
- charstring attr_value
- }
-
- type record SDP_attribute_quality {
- charstring attr_value
- }
-
- type record SDP_attribute_fmtp {
- charstring attr_value
- }
-
- type record SDP_attribute_curr {
- charstring preconditionType,
- charstring statusType,
- charstring direction
- }
-
- type record SDP_attribute_des {
- charstring preconditionType,
- charstring strength,
- charstring statusType,
- charstring direction
- }
-
- type record SDP_attribute_conf {
- charstring preconditionType,
- charstring statusType,
- charstring direction
- }
-
- type record SDP_attribute_rtpmap {
- charstring attr_value
- }
-
- type record SDP_attribute_rtcp {
- charstring attr_value
- }
-
- type record SDP_attribute_unknown {
- charstring name,
- charstring attr_value 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,
-
- //* 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
- }
-
- type set of SDP_bandwidth SDP_bandwidth_list;
-
- type record SDP_connection {
- charstring net_type,
- charstring addr_type,
- SDP_conn_addr conn_addr
- }
-
- type record SDP_conn_addr {
- charstring addr,
- integer ttl optional,
- integer num_of_addr optional
- }
-
- type set of SDP_connection SDP_connection_list;
-
- type record SDP_contact {
- charstring addr_or_phone,
- charstring disp_name optional
- }
-
- type SDP_contact SDP_contact_tel;
-
- type SDP_contact SDP_contact_email;
-
- type set of SDP_contact_email SDP_email_list;
-
- type record of charstring SDP_fmt_list ;
-
- type record SDP_key {
- charstring method,
- charstring key optional
- }
-
- 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 set of SDP_media_desc SDP_media_desc_list;
-
- type record SDP_media_port {
- integer port_number,
- integer num_of_ports optional
- }
-
- type record SDP_media_field {
- charstring media,
- SDP_media_port ports,
- charstring transport,
- SDP_fmt_list fmts
- }
-
- type record SDP_time{
- SDP_time_field time_field,
- SDP_repeat_list time_repeat optional
- }
-
- 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_repeat{
- SDP_typed_time repeat_interval,
- SDP_typed_time active,
- SDP_typed_time_list offsets
- }
-
- type set of SDP_repeat SDP_repeat_list;
-
- type record SDP_typed_time{
- integer time,
- charstring unit optional
- }
-
- type set of SDP_typed_time SDP_typed_time_list;
-
- type set of SDP_time SDP_time_list;
-
- type record SDP_timezone{
- charstring adjustment_time,
- SDP_typed_time offset
- }
-
- type set of SDP_timezone SDP_timezone_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
- }
-
- 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
- } // group Types
-
-
-} // end module LibSip_SDPTypes
/v1.6.0/LibSip_SDPTypes.ttcn
Property changes:
Deleted: svn:keywords
## -1 +0,0 ##
-Id
\ No newline at end of property
Index: v1.6.0/LibSip_Steps.ttcn
===================================================================
--- v1.6.0/LibSip_Steps.ttcn (revision 470)
+++ v1.6.0/LibSip_Steps.ttcn (nonexistent)
@@ -1,4162 +0,0 @@
-/*
- * @author STF 346, STF366, STF368, STF369
- * @version $Id$
- * @desc This module provides the types used by the test component
- * for SIP-IMS tests.
- */
-
-module LibSip_Steps language "TTCN-3:2005"//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 {
-
- //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;
-
- // 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;
-
-}
-
-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);
- }
-
- /**
- *
- * @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) 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.
- 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
- }};
-
- return 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";
-
- 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=md5", 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 v_result;
- }
-
- /**
- *
- * @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";
-
- 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=md5", 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;
-
- 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 := 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
-
- }
- };
-
- 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";
-
- 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=md5", 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 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;
-
- 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;
- }
- }
-
- 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
-
-group FieldOperations {
-
- /**
- *
- * @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);
- }
-
- /**
- *
- * @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 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));
- }
-
-
- /**
- *
- * @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)
- }
-
- /**
- *
- * @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)
- }
-
- /**
- *
- * @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
-
- /**
- *
- * @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.hostPort.host;
-
- if (ispresent(v_SipUrl.hostPort.portField))
- {
- v_locAddr.portField := v_SipUrl.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 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.userInfo.userOrTelephoneSubscriber);
- } // end f_getUserfromTo
-
- /**
- *
- * @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);
- }
-
- /**
- *
- * @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 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
-
- // 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.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 (ispresent(p_message.msgHeader.recordRoute)) {
- if (sizeof(p_message.msgHeader.recordRoute.routeBody)>p_index) {
- return(p_message.msgHeader.recordRoute.routeBody[p_index].nameAddr.addrSpec.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.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 := p_request.msgHeader.via.viaBody[1].viaParams[0]; // second element
- if (not v_viaParameter.id == "tokenized-by")
- {return(false)};
- return(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;
-
- 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
-
- if (not v_viaParameter.id == "tokenized-by")
- {return(false)}
- }
- return(true);
-
- }
-
-
-
-group SetHeaders {
-
-
- /**
- *
- * @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
- {
- var SemicolonParam_List v_params;
-
- 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))}
- };
- }// end function f_setHeadersGeneral
-
-
-
- /**
- *
- * @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 };
-
- f_addTagInTo(vc_to);
-
- vc_cancel_To := vc_to;
- vc_caller_To := vc_to;
-
- vc_caller_From := vc_from;
-
- vc_reqHostPort := vc_requestUri.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
- {
-
- p_cSeq_s.method := "CANCEL";
- //vc_branch := c_branchCookie & f_getRndTag();
- 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) runs on SipComponent
- {
- var SemicolonParam_List v_params;
-
- f_setHeadersGeneral(p_cSeq_s, "REGISTER"); // cseq, contact, branch, via
-
- vc_requestUri:=
- {
- scheme := c_sipScheme,
- userInfo := omit,
- hostPort := {host:=vc_userprofile.registrarDomain, portField:=omit},
- urlParameters := omit,
- headers := omit
- };
-
- vc_reqHostPort := vc_requestUri.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)
- {
- 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
-
- /**
- *
- * @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,
- 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.
- {
- 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,
- 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
-
- vc_requestUri:=
- {
- scheme := c_sipScheme,
- 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_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(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.hostPort;
-
- }// 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
-
- 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.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(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.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
-
- //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.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.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.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
-
- 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.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.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 (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 (ispresent(p_Request.msgHeader.authorization)) {
- vc_authorization := 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 (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
-
- /**
- *
- * @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);
-
- 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 (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;
- }
-
- 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 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 := 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;
- }
- } // 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(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))
- {
- vc_reqHostPort := vc_to.addressField.nameAddr.addrSpec.hostPort;
- vc_requestUri := vc_to.addressField.nameAddr.addrSpec;
- }
- else
- {
- vc_reqHostPort := vc_to.addressField.addrSpecUnion.hostPort;
- 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;
- };
-
-
- // 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)
- };
- };
-
- // 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};
-
- //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 ( ischosen(p_response.messageBody.xmlBody))
- {
- vc_xml_remote := p_response.messageBody.xmlBody;
- }
-
- 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;
- };
- }
- }
- };
-
- }// 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(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;
- }
-
- }// 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(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;
- }
-
- }// 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 {
-
- 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 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 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)
- 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 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 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);
- }
-
- /**
- * @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)}
-
- 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);
- }
-
- /**
- * @desc repare media/attribute lines
- *
- */
- function f_prepare_SDP(integer loc_sdp, integer loc_codec) 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 template charstring v_mypat := pattern "[ \t]#(0,)([\d]+)*";
- 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, v_mypat, 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))
- {
- cn := sizeof(vc_sdp_local.media_list[i].attributes);
- for (j :=0; j<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"};
- }
- // 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
- }
- }
- };
-
- }
- }
- // 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; //{};
- };
- }
-
- /**
- *
- * @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);
-
- 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);
- };
- };
- }
-
- /**
- * @desc c
- *
- */
-
-
- /*
- *
- * @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
- if (not (ispresent(vc_request.messageBody) and f_check_attribute(vc_request.messageBody.sdpMessageBody,p_direction_in)))
- {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_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 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 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; }
- }
-
- //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 (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
-
-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
-
- /**
- *
- * @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();
- }
- }
- }
-
- /**
- *
- * @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);
- }
- }
- }
-
- /**
- *
- * @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();};
- }
-
- [] tc_wait.timeout
- {
- setverdict (fail);
- f_componentStop();
- }
- }
- }
-
-
- /**
- *
- * @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
- {
-
- 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 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;
- }
- }
- } //end f_awaitingINVITE
-
- /**
- *
- * @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 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
-
- /**
- *
- * @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
- {
- tc_ack.stop;
- }
- }
- } //end f_awaitingAckRequest
-
- /**
- *
- * @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
-
- /**
- *
- * @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 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
- * 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();
- }
- }
-
- } // 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_setHeadersOnReceiptOfRequest(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 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;
- 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
- {
- f_setHeadersGeneral(vc_cSeq, "PRACK"); // cseq, contact, branch, via
- vc_rAck := valueof(m_RAck(vc_response.msgHeader.rSeq.responseNum, vc_cSeq.seqNumber, vc_cSeq.method));
-
- 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 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;
- }
-
-} // 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("component terminated - forced!");
- deactivate;
- stop;
- }
-
- /**
- *
- * @desc component termination
- */
- function f_componentStop() runs on SipComponent
- {
- syncPort.send(m_syncClientStop);
- SIPP.clear;
- stop;
- }
-
- /**
- *
- * @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 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 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
-
-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) runs on SipComponent
- {
- if (PX_SIP_REGISTRATION)
- {
- 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(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 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);
- v_request := m_REGISTER_Request_expires(vc_requestUri, vc_callIdReg,
- p_cSeq, vc_from, vc_to, vc_via, vc_contact, vc_authorization, "0");
- 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);
- v_request := m_REGISTER_Request_expires(vc_requestUri, vc_callIdReg,
- p_cSeq, vc_from, vc_to, vc_via, 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_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 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
-
-}//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
- {
- //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 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
- {
- 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(p_notify);
-
- }//end function f_Subscription
-
- /**
- *
- * @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;
- }
- [] 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);
- }
-
-
- }
- // TODO check how to solve sending of NOTIFY on SUBSCRIBE
-
- }//end function f_awaitingSubscription
-
- }//end group Subscription
-
-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 {
-
- /**
- *
- * @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
-
- 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;
- }
- }
- }
-
- 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));
- }
-
- 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));
- }
-
-} // end group Postambles
-
-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;}
- }
- }
-
- 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
- *
- */
- 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;}
- }
- }
-
- f_selfOrClientSyncAndVerdict(c_Ringing, f_getVerdict());
- return
- } // end of f_check_Ringing
-
- /*
- * @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;}
- }
- }
-
- f_selfOrClientSyncAndVerdict(c_annoucA, f_getVerdict());
- return
- } // end of f_check_AnnouncementUE_A
-
- /*
- * @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;}
- }
- }
-
- f_selfOrClientSyncAndVerdict(c_annouc, f_getVerdict());
- return
- } // end of f_check_Announcement
-
- /*
- * @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;}
- }
- }
-
- 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;}
- }
- }
-
- 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: 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 ;
- }
- }
-
-
- /**
- *
- * @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);
- }
-
- // 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,vc_callId, vc_cSeq))
- {
- 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;
- }
-
- // 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, 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.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));
- 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);
- 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);
- 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;
- }
-
- 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
/v1.6.0/LibSip_Steps.ttcn
Property changes:
Deleted: svn:keywords
## -1 +0,0 ##
-Id
\ No newline at end of property
Index: v1.6.0/LibSip_Templates.ttcn
===================================================================
--- v1.6.0/LibSip_Templates.ttcn (revision 470)
+++ v1.6.0/LibSip_Templates.ttcn (nonexistent)
@@ -1,3327 +0,0 @@
-/*
- * @author STF 346, STF366, STF368, STF369
- * @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
- * @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;
-
- //LibXMLTypes
- import from ietf_params_xml_ns_resource_lists language "XSD" all
- with {
- extension "File:../xsd/ResourceList.xsd"
- }
-
- import from org_etsi_uri__ngn_params_xml_simservs_xcap language "XSD" all
- with {
- extension "File:../xsd/SupplementaryServices.xsd"
- }
-
- import from org_etsi_uri__ngn_params_xml_simservs_mcid language "XSD" all
- with {
- extension "File:../xsd/MCID.xsd"
- }
-
- import from Ims3gpp language "XSD" all
- with {
- extension "File:../xsd/Ims3gpp.xsd"
- }
-
- import from ietf_params_xml_ns_conference_info language "XSD" all
- with {
- extension "File:../xsd/CONF.xsd"
- }
-
- import from org_etsi_uri__ngn_params_xml_simservs_pstn language "XSD" all
- with {
- extension "File:../xsd/PSTN.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
- }
-
- 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 CommaParam_List mw_digestResponse(template GenericParam p_genericParam) :=
- superset(p_genericParam); //* c_Integrity_protected_yes
-
- template SemicolonParam_List m_cpc :=
- {{"cpc",PX_SIP_ISUP_CPC_VALUE}};
-
- 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 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 SentProtocol m_SentProtocol (charstring p_protocol) :=
- {protocolName := c_sipName,
- protocolVersion:= c_sipVersion,
- transport:= p_protocol};
-
- template SipUrl m_SipUrl_currDomain(in SipUserProfile p_userprofile) := //* SIP-URL of the test system on SIP side
- {
- scheme := c_sipScheme, //* contains "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 SipUrl m_SipUrl_contactIpaddr(in SipUserProfile p_userprofile) := //* SIP-URL of the test system on SIP side
- {
- scheme := c_sipScheme, //* contains "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 SipUrl m_SipUrl_contactIpaddrAndCpc(in SipUserProfile p_userprofile) := //* SIP-URL of the test system on SIP side
- {
- scheme := c_sipScheme, //* contains "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 SipUrl m_SipUrl_currIpaddr(in SipUserProfile p_userprofile) := //* SIP-URL of the test system on SIP side
- {
- scheme := c_sipScheme, //* contains "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"
- 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"
- userInfo := //* optional
- {
- userOrTelephoneSubscriber := p_userprofile.publUsername,//* 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 SipUrl mw_TelUrl :=
- {
- scheme := c_telScheme,
- userInfo := *,
- hostPort := ?,
- urlParameters := *,
- headers := *
- };
-
- template SipUrl mw_SipUrl :=
- {
- scheme := c_sipScheme,
- userInfo := *,
- hostPort := ?,
- urlParameters := *,
- headers := *
- };
-
- template SipUrl mw_TelSip_unavailableInvalidUri :=
- {
- scheme := (c_telScheme,c_sipScheme),
- userInfo := {userOrTelephoneSubscriber:="unavailable", password:=omit},
- hostPort := {host:="anonymous.invalid", portField:=c_defaultSipPort},
- urlParameters := omit,
- headers := omit
- };
-
-
- template SipUrl mw_TelSip_unavailableUri (charstring p_host):=
- {
- scheme := (c_telScheme,c_sipScheme),
- userInfo := {userOrTelephoneSubscriber:="unavailable", password:=omit},
- hostPort := {host:=p_host, portField:=c_defaultSipPort},
- urlParameters := omit,
- headers := omit
- };
-
- template SipUrl mw_SipUrl_Number(charstring p_number) := //* SIP-URL with a calling party number
- {
- scheme := c_sipScheme, //* contains "sip"
- userInfo:= {userOrTelephoneSubscriber:=p_number, password:=*},
- hostPort := ?,
- urlParameters := *,
- headers := *
- };
-
- template SipUrl mw_TelSipUrl_Number(template charstring p_number) := //* SIP-URL with a calling party number
- {
- scheme := (c_telScheme,c_sipScheme), //* contains "sip" or "tel"
- userInfo:= {userOrTelephoneSubscriber:=p_number, password:=*}, //* nat or int format
- hostPort := ?,
- urlParameters := *,
- headers := *
- };
-
- template SipUrl mw_SipUrl_Host(charstring p_host) := //* SIP-URL with a calling party number
- {
- scheme := c_sipScheme, //* contains "sip"
- userInfo:= *,
- hostPort := {host:=p_host, portField:=*},
- urlParameters := *,
- headers := *
- };
-
-
- template SipUrl mw_SipUrl_NumberHost(charstring p_number, charstring p_host) := //* SIP-URL with a calling party number
- {
- scheme := c_sipScheme, //* contains "sip"
- userInfo:= {userOrTelephoneSubscriber:=p_number, password:=*},
- hostPort := {host:=p_host, portField:=*},
- 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"
- 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"
- userInfo:= {userOrTelephoneSubscriber:=p_number, password:=omit},
- hostPort := {host:=p_host, portField:=c_defaultSipPort},
- urlParameters := p_urlParameters,
- headers := omit
- };
-
- template SipUrl mw_SipUrl_Anonymous := //* SIP-URL with a calles party number
- {
- scheme := c_sipScheme, //* contains "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"
- userInfo:= *,
- hostPort := *,
- urlParameters := p_urlParameters,
- headers := *
- };
-
- template ContactAddress mw_ContactAddress :=
- {
- addressField := ?,
- contactParams := *
- };
-
- 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 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"
- 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"
- 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)
- }
-
-
- } //* end group Subfields
-
-
-
-
-
- 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 GenericParam m_Cause (template charstring p_cause):=
- {id:="cause", paramValue:=p_cause}
-
- template GenericParam mw_Cause (template charstring p_cause):=
- {id:=?, paramValue:= pattern "*{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 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 Authorization m_Authorization_other :=
- {
- fieldName := AUTHORIZATION_E,
- body := {{otherResponse := ?}}
- }
-
- 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 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 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 Event m_Event_conference :=
- {
- fieldName := EVENT_E,
- eventType := "conference",
- eventParams := omit
- };
-
- template Event m_Event_presence :=
- {
- fieldName := EVENT_E,
- eventType := "presence",
- eventParams := omit
- };
-
- template Event m_Event_reg :=
- {
- fieldName := EVENT_E,
- eventType := "reg",
- eventParams := omit
- };
-
- template Event m_Event_cdiv :=
- {
- fieldName := EVENT_E,
- eventType := "comm-div-info",
- 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 Expires m_Expires (charstring p_deltaSec):=
- {
- fieldName := EXPIRES_E,
- deltaSec := p_deltaSec
- };
-
-
- template PAssertedID m_PAssertedID(template Addr_Union p_pAssertedIDValue) :=
- {
- fieldName := P_ASSERTED_ID_E,
- pAssertedIDValueList := {p_pAssertedIDValue}
- };
-
- template HistoryInfo mw_HistoryInfo(template HistoryInfo_List p_HistoryInfo_List) :=
- {
- fieldName := HISTORY_INFO_E,
- historyInfoList := p_HistoryInfo_List
- };
-
- template HistoryInfoEntry mw_HistoryInfoEntry(template SipUrl p_Url, template IntegerList 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 IntegerList 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 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 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 Reason m_Reason(integer p_cause) :=
- {
- fieldName := REASON_E,
- reasonValues := {m_ReasonValue(int2str(p_cause),"dummy")}
- };
-
- template Reason m_Reason21 :=
- {
- fieldName := REASON_E,
- reasonValues := {m_ReasonValue(int2str(21),"call reject")}
- };
-
- template RecordRoute m_recordRoute_currIpAddr (in SipUserProfile p_userprofile):=
- {
- fieldName := RECORD_ROUTE_E,
- routeBody := {{nameAddr := {displayName := omit,
- addrSpec := {scheme := c_sipScheme, //* contains "sip"
- userInfo := omit,
- hostPort := {host:=p_userprofile.currIpaddr, portField:= p_userprofile.currPort},
- 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 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 Require m_Require_replaces :=
- {
- fieldName := REQUIRE_E,
- optionsTags := {c_replaces}
- };
-
-
- 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 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 UserToUser m_UserToUserData(template charstring p_U2UData):=
- {
- fieldName := USER_TO_USER_E,
- uuiData := p_U2UData,
- uuiParam := m_UserToUserEncodingHex
- }
-
- 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 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 To mw_To(template SipUrl p_sipUrl) := {
- fieldName := TO_E,
- addressField := { nameAddr := {displayName := *, addrSpec := p_sipUrl}},
- toParams:= *
- }
-
- template From mw_From(template SipUrl p_sipUrl) := {
- fieldName := FROM_E,
- addressField := { nameAddr := {displayName := *, addrSpec := p_sipUrl}},
- fromParams:= *
- }
-
- 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 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 Privacy mw_Privacy_id :=
- {
- fieldName := PRIVACY_E,
- privValueList := {*,"id",*}
- };
-
-
- template Privacy mw_Privacy(template charstring p_value) :=
- {
- fieldName := PRIVACY_E,
- privValueList := {*,p_value,*}
- };
-
-
- template Privacy mw_Privacy_user :=
- {
- fieldName := PRIVACY_E,
- privValueList := {*,"user",*}
- };
-
- template Reason mw_Reason(integer p_cause) :=
- {
- fieldName := REASON_E,
- reasonValues := {m_ReasonValue(int2str(p_cause),?)}
- };
-
- template Reason mw_ReasonSIP(integer p_cause) :=
- {
- fieldName := REASON_E,
- reasonValues := {m_ReasonValueSIP(int2str(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 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 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 := ?,//MRO
- contactParams := {{"isfocus",*}}
- }
- }
- }
- }
-
- 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
-
-
-group MessageTemplates {
-group dummy_templates {
- group dummy_parameter_send {
-
- template RequestLine m_requestLine_dummy(Method p_method) :=
- {
- method := p_method,
- requestUri := c_unavailableUri,
- sipVersion := c_sipNameVersion
- }
-
- 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,
- 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,
- priority := omit,
- privacy := omit,
- proxyAuthenticate := omit,
- proxyAuthorization := omit,
- proxyRequire := omit,
- pVisitedNetworkID := omit, //* RFC3455
- rAck := omit,
- rSeq := omit,
- reason := omit,
- recordRoute := omit,
- referredBy := omit, //* RFC3892 - REFER method
- referTo := omit, //* RFC3515 - 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
- 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 RequestLine mw_requestLine_dummy(Method p_method) :=
- {
- method := p_method,
- requestUri := ?,
- sipVersion := c_sipNameVersion
- }
-
- 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 := ?,
- 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 := *,
- priority := *,
- privacy := *,
- proxyAuthenticate := *,
- proxyAuthorization := *,
- proxyRequire := *,
- pVisitedNetworkID := *, //* RFC3455
- rAck := *,
- rSeq := *,
- reason := *,
- recordRoute := *,
- referredBy := *, //* RFC3892 - REFER method
- referTo := *, //* RFC3515 - REFER method
- replaces := *, //* RFC 3891
- replyTo := *,
- require := *,
- retryAfter := *,
- route := *,
- securityClient := *, //* RFC3329
- securityServer := *, //* RFC3329
- securityVerify := *, //* RFC3329
- server := *,
- serviceRoute := *, //* RFC3608
- sessionExpires := *, //* RFC4028
- 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 ACK_Request m_ACK_Dummy :=
- {
- requestLine := m_requestLine_dummy(ACK_E),
- msgHeader := m_msgHeader_dummy,
- messageBody := omit,
- payload := omit
- }
-
- template BYE_Request m_BYE_Dummy :=
- {
- requestLine := m_requestLine_dummy(BYE_E),
- msgHeader := m_msgHeader_dummy,
- messageBody := omit,
- payload := omit
- }
-
- template CANCEL_Request m_CANCEL_Dummy :=
- {
- requestLine := m_requestLine_dummy(CANCEL_E),
- msgHeader := m_msgHeader_dummy,
- messageBody := omit,
- payload := omit
- }
-
- template INFO_Request m_INFO_Dummy :=
- {
- requestLine := m_requestLine_dummy(INFO_E),
- msgHeader := m_msgHeader_dummy,
- messageBody := omit,
- payload := omit
- }
-
- template INVITE_Request m_INVITE_Dummy :=
- {
- requestLine := m_requestLine_dummy(INVITE_E),
- msgHeader := m_msgHeader_dummy,
- messageBody := omit,
- payload := omit
- }
-
- template MESSAGE_Request m_MESSAGE_Dummy :=
- {
- requestLine := m_requestLine_dummy(MESSAGE_E),
- msgHeader := m_msgHeader_dummy,
- messageBody := omit,
- payload := omit
- }
-
- template NOTIFY_Request m_NOTIFY_Dummy :=
- {
- requestLine := m_requestLine_dummy(NOTIFY_E),
- msgHeader := m_msgHeader_dummy,
- messageBody := omit,
- payload := omit
- }
-
- template PRACK_Request m_PRACK_Dummy :=
- {
- requestLine := m_requestLine_dummy(PRACK_E),
- msgHeader := m_msgHeader_dummy,
- messageBody := omit,
- payload := omit
- }
-
- template PUBLISH_Request m_PUBLISH_Dummy :=
- {
- requestLine := m_requestLine_dummy(PUBLISH_E),
- msgHeader := m_msgHeader_dummy,
- messageBody := omit,
- payload := omit
- }
-
- template REGISTER_Request m_REGISTER_Dummy :=
- {
- requestLine := m_requestLine_dummy(REGISTER_E),
- msgHeader := m_msgHeader_dummy,
- messageBody := omit,
- payload := omit
- }
-
- template REFER_Request m_REFER_Dummy :=
- {
- requestLine := m_requestLine_dummy(REFER_E),
- msgHeader := m_msgHeader_dummy,
- messageBody := omit,
- payload := 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{
-
- 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 := *
- }
-
- template CANCEL_Request mw_CANCEL_Dummy :=
- {
- requestLine := mw_requestLine_dummy(CANCEL_E),
- msgHeader := mw_msgHeader_dummy,
- messageBody := *,
- payload := *
- }
-
- template INFO_Request mw_INFO_Dummy :=
- {
- requestLine := mw_requestLine_dummy(INFO_E),
- msgHeader := mw_msgHeader_dummy,
- messageBody := *,
- payload := *
- }
-
- template INVITE_Request mw_INVITE_Dummy :=
- {
- requestLine := mw_requestLine_dummy(INVITE_E),
- msgHeader := mw_msgHeader_dummy,
- messageBody := *,
- payload := *
- }
-
- template MESSAGE_Request mw_MESSAGE_Dummy :=
- {
- requestLine := mw_requestLine_dummy(MESSAGE_E),
- msgHeader := mw_msgHeader_dummy,
- messageBody := *,
- payload := *
- }
-
- 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 := *
- }
-
- template PUBLISH_Request mw_PUBLISH_Dummy :=
- {
- requestLine := mw_requestLine_dummy(PUBLISH_E),
- msgHeader := mw_msgHeader_dummy,
- messageBody := *,
- payload := *
- }
-
- template REFER_Request mw_REFER_Dummy :=
- {
- requestLine := mw_requestLine_dummy(REFER_E),
- msgHeader := mw_msgHeader_dummy,
- messageBody := *,
- payload := *
- }
-
- template REGISTER_Request mw_REGISTER_Dummy :=
- {
- requestLine := mw_requestLine_dummy(REGISTER_E),
- msgHeader := mw_msgHeader_dummy,
- messageBody := *,
- payload := *
- }
-
- 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
-}
-
-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
-
- },
- 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 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 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 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 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 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 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
-
- 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 INVITE_Request mw_INVITE_Request_Base modifies mw_INVITE_Dummy :=
- {
- requestLine :=
- {
- method := INVITE_E
- }
- }
-
- template MESSAGE_Request mw_MESSAGE_Request_Base modifies mw_MESSAGE_Dummy :=
- {
- msgHeader :=
- {
- contact := *
- }
- }
-
- template NOTIFY_Request mw_NOTIFY_Request_Base (template CallId p_callId) modifies mw_NOTIFY_Dummy :=
- {
- msgHeader :=
- {
- callId := p_callId
- }
- }
-
- 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 (CallId p_callId) modifies mw_REFER_Dummy :=
- {
- msgHeader :=
- {
- callId := p_callId
- }
- }
-
- template REFER_Request
- mw_REFER_Request(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
- }
- }
-
- template SUBSCRIBE_Request mw_SUBSCRIBE_Request_Base modifies mw_SUBSCRIBE_Dummy :=
- {
- requestLine :=
- {
- method := SUBSCRIBE_E
- }
- }
-
- template UPDATE_Request mw_UPDATE_Request_Base(template CallId p_callId) modifies mw_UPDATE_Dummy :=
- {
- msgHeader :=
- {
- callId := p_callId
- }
- }
-
- } //* end group request_receive
-
- group response_send {
-
- 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
- }
-
-
-
- } //* end group response_send
-
- group response_receive {
-
- 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
-
-} //* end group full_templates
-
-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, Route p_route)
- modifies m_ACK_Request_Base
- :=
- {
- msgHeader :=
- {
- route := p_route
- }
- }
-
- 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 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 :=
- {
- hostPort:= p_requestUri.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
- }
- }
-
-} //* end group request_send
-
-
-group request_receive {
-
- template BYE_Request mw_BYE_Request_Reason(template CallId p_callId, integer p_cause) modifies mw_BYE_Request_Base :=
- {
- msgHeader :=
- {
- reason := mw_Reason(p_cause)
- }
- }
-
- template BYE_Request mw_BYE_Request_ReasonSIP(template CallId p_callId, integer p_cause) modifies mw_BYE_Request_Base :=
- {
- msgHeader :=
- {
- reason := mw_ReasonSIP(p_cause)
- }
- }
-
- 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 INVITE_Request mw_INVITE_Request_RequestURI (template SipUrl p_sipUrl) modifies mw_INVITE_Dummy :=
- {
- requestLine :=
- {
- requestUri := p_sipUrl,
- sipVersion := c_sipNameVersion
- }
- }
-
- template INFO_Request mw_INFO_Request_MB (template CallId p_callId, template MessageBody p_mb) modifies mw_INFO_Request_Base :=
- {
- messageBody := p_mb
- }
-
- 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 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 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 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
-
-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,
- AlertInfo p_alertInfo
- ) modifies m_Response_Base:= {
- msgHeader := {
- alertInfo := p_alertInfo
- }
- }
-
- 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 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_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
- }
-
-} //* end group response_send
-
-
-group response_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}
- }
- }
-
- 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 Response mw_Response_Reason (template StatusLine p_statusLine, template CallId p_callId,
- template CSeq p_cSeq, integer 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
- }
- }
-
- 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 := ?
- }
- }
-} //* end group response_receive
-
-
-} //* end group modified_templates
-
-} //* end group MessageTemplates
-
-group SDP_Templates {
-
- group SDP_Messages {
-
- 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 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 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 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 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 := 1, //* v=1 unacceptable version of SDP
- bandwidth := {{PX_SIP_SDP_b_modifier, PX_SIP_SDP_b_bandwidth}}
- };
- }//* end group modified_templates
-
- } //* end group SDP_Messages
-
- group SDP_Fields {
-
- 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
- };
-
- 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_media_dynPT(charstring p_PT, charstring p_encod) := {
- 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 := omit,
- 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 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:=?
- }
-
- 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 SDP_media_field mw_media_PCMU :=
- {
- media := c_audio,
- ports := { port_number := ?, num_of_ports:=* },
- transport := c_rtpAvp,
- fmts := { "0" }
- }
-
- 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 SDP_media_field mw_media_G722 :=
- {
- media := c_audio,
- ports := { port_number := ?, num_of_ports:=* },
- transport := "RTP/AVP",
- fmts := { "9" }
- }
-
- template SDP_media_field mw_media_AMR_DPT :=
- {
- media := c_audio,
- ports := { port_number := ?, num_of_ports:=* },
- transport := c_rtpAvp,
- 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
-
-} //* 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_longPlainText:=
- {
- textplain := c_longMessageContent_1300Bytes
- };
-
- 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:="PX_SIP_MIME_Boundary",
- mimeEncapsulatedList:= {
- {content_type:="PX_SIP_SDP_ContentType",
- content_disposition:=omit,
- mime_encapsulated_part:={sdpMessageBody := p_sdp}},
- {content_type:="PX_SIP_ISUP_ContentType",
- content_disposition:=omit,
- mime_encapsulated_part:={xmlBody := p_xmlBody}}
- }
- }
- }
-
- 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_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 TIMS3GPP 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 TIMS3GPP 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 {
-
- 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 {
-
- 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 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);
- };
- }
-
- 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_result := v_result + 2+c_CRlen + lengthof(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
- ); //* "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_result := v_result + 2+c_CRlen + lengthof(p_mb.bandwidth[i].modifier & " ") +
- lengthof(int2str(p_mb.bandwidth[i].bandwidth));
- }
- };
-
- for (var integer i:=0; i<sizeof(p_mb.times); i:=i+1) {
- v_result := v_result + 2+c_CRlen + lengthof(p_mb.times[i].time_field.start_time & " "
- & p_mb.times[i].time_field.stop_time);//* "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);
- };
- }
- }
- };
- };
-
- 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="
-
- 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));
-
-
- 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].media_field.fmts); 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
-
- return v_result;
- };//* end function f_SDPlength
-
- 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))
- {v_result := v_result + 1 + lengthof(int2str(p_element.conn_addr.ttl));};
- if (ispresent(p_element.conn_addr.num_of_addr))
- {v_result := v_result + 1 + lengthof(int2str(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;
- 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
-
- 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_type))
- {
- v_result := f_XMLBody_ConferenceInfo_Length(p_mb.conference_type);
- };
-
- // 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 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 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 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;
-
- 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 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 {
-
-/*
- *
- * @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
-
-} //* group TemplatePreparationFunctions
-
-
-} //* end module LibSip_Templates
/v1.6.0/LibSip_Templates.ttcn
Property changes:
Deleted: svn:keywords
## -1 +0,0 ##
-Id
\ No newline at end of property