/tags/v2.0.0/ttcn/LibSip_Steps.ttcn |
---|
0,0 → 1,4417 |
/* |
* @author STF 346, STF366, STF368, STF369, STF450 |
* @version $Id$ |
* @desc This module provides the types used by the test component |
* for SIP-IMS tests. |
* This module is part of LibSipV2. |
*/ |
module LibSip_Steps //MRO |
{ |
//LibCommon |
import from LibCommon_Sync all ; |
import from LibCommon_VerdictControl all ; |
//LibSip |
import from LibSip_SIPTypesAndValues all; |
import from LibSip_SDPTypes all; |
import from LibSip_Templates all; |
import from LibSip_Interface all; |
import from LibSip_PIXITS all; |
import from LibSip_XMLTypes all; |
group externalfunctions { |
//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 valueof(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 valueof(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.components.sip.hostPort.host; |
if (ispresent(v_SipUrl.components.sip.hostPort.portField)) |
{ |
v_locAddr.portField := v_SipUrl.components.sip.hostPort.portField; |
} |
else |
{ |
v_locAddr.portField := c_defaultSipPort; |
} |
return(v_locAddr); |
} // end f_getContactAddr |
/** |
* |
* @desc function checks if History-Info-Header of the p_message contains a particular URI |
* @param p_message (request or response) SIP message to be analysed |
* @param p_URI name of parameter |
* @return true if p_URI parameter exist |
*/ |
function f_checkHeaderInfoURI(in Response p_message, SipUrl p_URI) return boolean |
{ |
var integer v_chargeParamsLen; |
if (ispresent(p_message.msgHeader.historyInfo)) { |
for (var integer i:=0; i<sizeof(p_message.msgHeader.historyInfo.historyInfoList); i:=i+1) |
{if(p_message.msgHeader.historyInfo.historyInfoList[i].nameAddr.addrSpec == p_URI) |
{return (true)} |
}; |
} |
return (false) |
} |
/** |
* |
* @desc function returns the Userinfo from a given To header field |
* @param p_to To header field to be analysed |
* @return Userinfo from the To header field as a charstring |
*/ |
function f_getUserfromTo(in To p_to) runs on SipComponent return charstring |
{ |
var SipUrl v_SipUrl; |
if (ischosen(p_to.addressField.nameAddr)) |
{ |
v_SipUrl := p_to.addressField.nameAddr.addrSpec; |
} |
else |
{ |
v_SipUrl := p_to.addressField.addrSpecUnion; |
} |
return(v_SipUrl.components.sip.userInfo.userOrTelephoneSubscriber); |
} // end f_getUserfromTo |
/** |
* |
* @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.components.sip.hostPort)} |
}; |
setverdict(fail); |
return(c_hostport_dummy) |
} |
/** |
* |
* @desc functions give access to an element of the Record-Route header field (record). |
* @param p_message (request) SIP message to be analysed |
* @param p_index index of recordRoute record element to be retrieved |
* @return HostPort value of the Record-Route element or omit |
*/ |
function f_getRecordRouteHeaderElementAddressFromRequest(in Request p_message, in integer p_index) return HostPort |
{ |
if (ispresent(p_message.msgHeader.recordRoute)) { |
if (sizeof(p_message.msgHeader.recordRoute.routeBody)>p_index) { |
return(p_message.msgHeader.recordRoute.routeBody[p_index].nameAddr.addrSpec.components.sip.hostPort)} |
}; |
setverdict(fail); |
return(c_hostport_dummy) |
} |
/** |
* |
* @desc functions give access to an element of the Record-Route header field (record). |
* @param p_message (response) SIP message to be analysed |
* @param p_index index of recordRoute record element to be retrieved |
* @return HostPort value of the Record-Route element or omit |
*/ |
function f_getRecordRouteHeaderElementAddressFromResponse(in Response p_message, in integer p_index) return HostPort |
{ |
if (ispresent(p_message.msgHeader.recordRoute)) { |
if (sizeof(p_message.msgHeader.recordRoute.routeBody)>p_index) { |
return(p_message.msgHeader.recordRoute.routeBody[p_index].nameAddr.addrSpec.components.sip.hostPort)} |
}; |
setverdict(fail); |
return(c_hostport_dummy) |
} |
/** |
* |
* @desc functions give access to an element of the Via header field (record). |
* @param p_message (request) SIP message to be analysed |
* @param p_index index of via record element to be retrieved |
* @return HostPort value of the Via element or omit |
*/ |
function f_getViaHeaderElementHostPort(in Request p_message, in integer p_index) return HostPort |
{ |
if (sizeof(p_message.msgHeader.via.viaBody)>p_index) { |
return(p_message.msgHeader.via.viaBody[p_index].sentBy)} |
setverdict(fail); |
return(c_hostport_dummy) |
} |
/** |
* |
* @desc functions give access to an element of the Via header field (record). |
* @param p_message (response) SIP message to be analysed |
* @param p_index index of via record element to be retrieved |
* @return HostPort value of the Via element or omit |
*/ function f_getViaHeaderElementHostPortResponse(in Response p_message, in integer p_index) return HostPort |
{ |
if (sizeof(p_message.msgHeader.via.viaBody)>p_index) { |
return(p_message.msgHeader.via.viaBody[p_index].sentBy)} |
setverdict(fail); |
return(c_hostport_dummy) |
} |
/** |
* |
* @desc function checks indicators if topology hiding (TH) has been applied: |
* - second element in via-header record has tokenized-by parameter |
* @param p_Request SIP message to be analysed |
* @return boolean value (true indicate TH, false otherwise) |
*/ |
function f_topologyHiding(inout Request p_request) runs on SipComponent return boolean |
{ |
var GenericParam v_viaParameter := 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 |
{ |
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.components.sip.hostPort; |
}// end function f_setHeadersBYE |
/** |
* |
* @desc setting of general and basic CANCEL header fields |
* @param p_cSeq_s |
*/ |
function f_setHeadersCANCEL(inout CSeq p_cSeq_s) runs on SipComponent |
{ |
p_cSeq_s.method := "CANCEL"; |
//vc_branch := c_branchCookie & f_getRndTag(); // STF 406: CANCEL and ACK should have the same branch as the INVITE |
vc_via:={ |
fieldName := VIA_E, |
viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} |
}; |
}// end function f_setHeadersCANCEL |
/** |
* |
* @desc function sets header field for the next outgoing REGISTER message |
* @param p_cSeq_s CSeq parameter to be applied |
*/ |
function f_setHeaders_REGISTER(inout CSeq p_cSeq_s) runs on SipComponent |
{ |
var SemicolonParam_List v_params; |
f_setHeadersGeneral(p_cSeq_s, "REGISTER"); // cseq, contact, branch, via |
vc_requestUri:= |
{ |
scheme := c_sipScheme, |
components := {sip:={ |
userInfo := omit, |
hostPort := {host:=vc_userprofile.registrarDomain, portField:=omit}}}, |
urlParameters := omit, |
headers := omit |
}; |
vc_reqHostPort := vc_requestUri.components.sip.hostPort; |
vc_callId := { fieldName:=CALL_ID_E, callid:=f_getRndCallId(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, |
components := {sip:={ |
userInfo := omit, |
hostPort := {host:=vc_userprofile.registrarDomain, portField:=omit}}}, |
urlParameters := omit, |
headers := omit |
}; |
//new branch tag due to different branch tag in new REGISTER method |
vc_branch := c_branchCookie & f_getRndTag(); |
vc_via_REG :={ |
fieldName := VIA_E, |
viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} |
}; |
// Extract challenge and calculate credentials for a response. |
v_challenge := vc_response.msgHeader.wwwAuthenticate.challenge.digestCln; |
// Prepair right answer |
vc_authorization := |
{ |
fieldName := AUTHORIZATION_E, |
body := {f_calculatecCredentials(vc_userprofile, "REGISTER", v_challenge)} |
} |
}// end function f_setHeaders_2ndREGISTER |
/** |
* |
* @desc function sets via, cseq and authorization header for the next outgoing (protected) REGISTER |
* NO response in Authorization header to cause an error |
* @verdict |
*/ |
function f_setHeaders_2ndREGISTER_wo_response() runs on SipComponent |
{ |
var CommaParam_List v_challenge; |
vc_branch := c_branchCookie & f_getRndTag(); |
vc_via_REG :={ |
fieldName := VIA_E, |
viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} |
}; |
if(ischosen(vc_response.msgHeader.wwwAuthenticate.challenge.otherChallenge)) |
// Extract challenge and calculate credentials for a response. |
{ |
v_challenge := vc_response.msgHeader.wwwAuthenticate.challenge.otherChallenge.authParams; |
} |
else |
{ |
v_challenge := vc_response.msgHeader.wwwAuthenticate.challenge.digestCln; |
} |
// Increment CSeq sequence number |
vc_cSeq.seqNumber := vc_cSeq.seqNumber + 1; |
// Prepair right answer |
vc_authorization := |
{ |
fieldName := AUTHORIZATION_E, |
body := {f_calculatecCredentials_wo_response(vc_userprofile, "REGISTER", v_challenge)} |
} |
}// end function f_setHeaders_2ndREGISTER_wo_response |
/** |
* |
* @desc function sets via, cseq and authorization header with different private name for the next outgoing (protected) REGISTER |
* @verdict |
*/ |
function f_setHeaders_2ndREGISTER_authorizationWithDifferentUserName() runs on SipComponent |
{ |
var CommaParam_List v_challenge; |
vc_branch := c_branchCookie & f_getRndTag(); |
vc_requestUri:= |
{ |
scheme := c_sipScheme, |
components := {sip:={ |
userInfo := omit, |
hostPort := {host:=vc_userprofile.registrarDomain, portField:=omit}}}, |
urlParameters := omit, |
headers := omit |
}; |
vc_via_REG :={ |
fieldName := VIA_E, |
viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} |
}; |
// Extract challenge and calculate credentials for a response. |
v_challenge := vc_response.msgHeader.wwwAuthenticate.challenge.otherChallenge.authParams; |
// Increment CSeq sequence number |
vc_cSeq.seqNumber := vc_cSeq.seqNumber + 1; |
// Prepair right answer |
vc_authorization := |
{ |
fieldName := AUTHORIZATION_E, |
body := {f_calculatecCredentialsAndChangeUserName(vc_userprofile, "REGISTER", v_challenge)} |
} |
}// end function f_setHeaders_2ndREGISTER_authorizationWithDifferentUserName |
/** |
* |
* @desc function sets header fields for the next outgoing REGISTER (de-registration) |
* @param p_cSeq_s cSeq to be used |
* @verdict |
*/ |
function f_setHeaders_deREGISTER(inout CSeq p_cSeq_s) runs on SipComponent |
{ |
var SemicolonParam_List v_params; |
f_setHeadersGeneral(p_cSeq_s, "REGISTER"); // cseq, contact, branch, via |
vc_requestUri:= |
{ |
scheme := c_sipScheme, |
components := {sip:={ |
userInfo := omit, |
hostPort := {host:=vc_userprofile.registrarDomain, portField:=omit}}}, |
urlParameters := omit, |
headers := omit |
}; |
vc_to := valueof(m_To(m_SipUrl_currDomain(vc_userprofile))); |
v_params := {{id:=c_tagId, paramValue:=f_getRndTag()}} |
vc_from := {fieldName := FROM_E, |
addressField :=vc_to.addressField, |
fromParams := v_params |
}; |
vc_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.components.sip.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.components.sip.hostPort; |
}// end function f_setHeadersUPDATE |
/** |
* |
* @desc setting of general and basic Message header fields |
* in additon to the addresses (To, From, ReqUri) |
* @param p_cSeq_s |
*/ |
function f_setHeadersMESSAGE(inout CSeq p_cSeq_s) runs on SipComponent |
{ |
f_setHeadersGeneral(p_cSeq_s, "MESSAGE"); // cseq, contact, branch, via |
vc_callId := { fieldName:=CALL_ID_E, callid:=f_getRndCallId(p_cSeq_s) & c_AT & vc_userprofile.currIpaddr }; |
vc_cancel_To := vc_to; |
vc_caller_To := vc_to; |
vc_caller_From := vc_from; |
vc_reqHostPort := vc_requestUri.components.sip.hostPort; |
}// end function f_setHeadersMESSAGE |
/** |
* |
* @desc setting of general and basic Notify header fields |
* in additon to the addresses (To, From, ReqUri) |
* @param p_cSeq_s |
*/ |
function f_setHeadersNOTIFY(inout CSeq p_cSeq_s) runs on SipComponent |
{ |
f_setHeadersGeneral(p_cSeq_s, "NOTIFY"); // cseq, contact, branch, via |
vc_cancel_To := vc_to; |
vc_caller_To := vc_to; |
vc_caller_From := vc_from; |
vc_reqHostPort := vc_requestUri.components.sip.hostPort; |
}// end function f_setHeadersNOTIFY |
/** |
* |
* @desc setting of general and basic Publish header fields |
* in additon to the addresses (To, From, ReqUri) |
* @param p_cSeq_s |
*/ |
function f_setHeadersPUBLISH(inout CSeq p_cSeq_s) runs on SipComponent |
{ |
f_setHeadersGeneral(p_cSeq_s, "PUBLISH"); // cseq, contact, branch, via |
//after SUBSCRIBE message callid shall be same |
//vc_callId := { fieldName:=CALL_ID_E, callid:=f_getRndCallId(p_cSeq_s) & c_AT & vc_userprofile.currIpaddr }; |
vc_cancel_To := vc_to; |
vc_caller_To := vc_to; |
vc_caller_From := vc_from; |
vc_reqHostPort := vc_requestUri.components.sip.hostPort; |
}// end function f_setHeadersPUBLISH |
/** |
* |
* @desc function sets header field for the next outgoing SUBSCRIBE message |
* @param p_cSeq_s CSeq parameter to be applied |
*/ |
function f_setHeaders_SUBSCRIBE(inout CSeq p_cSeq_s) runs on SipComponent |
{ |
var SemicolonParam_List v_params; |
f_setHeadersGeneral(p_cSeq_s, "SUBSCRIBE"); // cseq, contact, branch, via |
vc_requestUri:=valueof(m_SipUrl_currDomain(vc_userprofile)); |
vc_reqHostPort := vc_requestUri.components.sip.hostPort; |
vc_callId := { |
fieldName := CALL_ID_E, |
callid := f_getRndCallId(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.components.sip.hostPort; |
}// end function f_setHeadersMESSAGE |
/** |
* |
* @desc setting of general and basic REFER header fields |
* in additon to the addresses (To, From, ReqUri) |
* @param p_cSeq_s |
*/ |
function f_setHeadersREFER(inout CSeq p_cSeq_s) runs on SipComponent |
{ |
f_setHeadersGeneral(p_cSeq_s, "REFER"); // cseq, contact, branch, via |
//vc_callId := { fieldName:=CALL_ID_E, callid:=f_getRndCallId(p_cSeq_s) & c_AT & vc_userprofile.currIpaddr }; |
vc_cancel_To := vc_to; |
vc_caller_To := vc_to; |
vc_caller_From := vc_from; |
vc_reqHostPort := vc_requestUri.components.sip.hostPort; |
}// end function f_setHeadersREFER |
/** |
* |
* @desc This function reads all necessary headers from the received REGISTER message and generate the tag for the answer |
* @param p_Request REGISTER that has been received |
*/ |
function f_setHeadersOnReceiptOfREGISTER(Request p_Request) |
runs on SipComponent { |
f_setHeadersOnReceiptOfRequest(p_Request); |
vc_callId := p_Request.msgHeader.callId; |
vc_caller_From := vc_from; |
f_addTagInTo(vc_to); |
vc_caller_To := vc_to; |
vc_requestUri := p_Request.requestLine.requestUri; |
vc_cancel_To := p_Request.msgHeader.toField; |
if (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 |
function f_setHeadersOnReceiptOfREFER(Request p_Request) |
runs on SipComponent { |
f_setHeadersOnReceiptOfRequest(p_Request); |
vc_requestUri := p_Request.requestLine.requestUri; |
vc_cancel_To := p_Request.msgHeader.toField; |
if (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}; |
} // 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.components.sip.hostPort; |
vc_requestUri := vc_to.addressField.nameAddr.addrSpec; |
} |
else |
{ |
vc_reqHostPort := vc_to.addressField.addrSpecUnion.components.sip.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 check if message body include SDP (session level) attribute (2nd parameter) |
* for any media |
* |
*/ |
function f_check_session_attribute(in SDP_Message p_sdp, in template SDP_attribute p_attribute) runs on SipComponent return boolean { |
if (ispresent(p_sdp.attributes)) { |
for (var integer j:=0; j<sizeof(p_sdp.attributes); j:=j+1){ |
if (match(p_sdp.attributes[j],p_attribute)) {return(true);}; |
}; |
} |
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) |
else {if (ispresent(p_sdp.media_list)) { |
for (var integer j:=0; j<sizeof(p_sdp.media_list); j:=j+1){ |
if (ispresent(p_sdp.media_list[j].attributes)) { |
for (var integer i:=0; i<sizeof(p_sdp.media_list[j].attributes); i:=i+1){ |
if (match(p_sdp.media_list[j].attributes[i],p_attribute)) |
{v_attribute := p_sdp.media_list[j].attributes[i];}; |
}; |
} |
}; |
}}; |
select (valueof(v_attribute)) |
{ |
case (mw_attribute_sendonly) {return(valueof(m_attribute_recvonly));} |
case (mw_attribute_sendrecv) {return(valueof(m_attribute_sendrecv));}//MRO |
case (mw_attribute_inactive) {return(valueof(m_attribute_inactive));}//MRO |
case (mw_attribute_recvonly) {return(valueof(m_attribute_sendonly));}//MRO |
} |
return(valueof(m_attribute_sendrecv));//the default return value in case of missing attribute offer |
} |
/** |
* @desc check if message body include SDP bandwidth (2nd parameter) |
* either for the session or a media description |
*/ |
function f_check_bandwidth(in SDP_Message loc_sdp, in template SDP_bandwidth loc_bandw) runs on SipComponent return boolean { |
if (ispresent(loc_sdp.bandwidth)) { |
for (var integer j:=0; j<sizeof(loc_sdp.bandwidth); j:=j+1){ |
if (match(loc_sdp.bandwidth[j],loc_bandw)) {return(true);}; |
}; |
}; |
if (ispresent(loc_sdp.media_list)) { |
for (var integer j:=0; j<sizeof(loc_sdp.media_list); j:=j+1){ |
if (ispresent(loc_sdp.media_list[j].bandwidth)) { |
for(var integer i:=0; i< sizeof(loc_sdp.media_list[j].bandwidth); i:=i+1) { |
if (match(loc_sdp.media_list[j].bandwidth[i],loc_bandw)) { |
return(true);}; |
} |
} |
}; |
}; |
return(false); |
} |
/** |
* @desc 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 SDP_attribute_list v_mediaAttributes := {}; |
//increase session version |
vc_sdp_local.origin.session_version := int2str(str2int(vc_sdp_remote.origin.session_version)+1); |
// if more than one codec, select the firs one |
mn:= sizeof(vc_sdp_remote.media_list); |
for (i :=0; i < mn; i := i+1) |
{ |
//for every single media |
if (ispresent(vc_sdp_remote.media_list[i].attributes)) |
{ |
cn := sizeof(vc_sdp_remote.media_list[i].attributes); |
}; |
if (sizeof(vc_sdp_remote.media_list[i].media_field.fmts)>0) |
{ |
// select the first one |
v_PT := vc_sdp_remote.media_list[i].media_field.fmts[0]; |
vc_sdp_local.media_list[i].media_field.fmts := {v_PT}; |
for (j :=0; j<cn; j:=j+1) |
{ |
if (ischosen(vc_sdp_remote.media_list[i].attributes[j].rtpmap)) |
{ |
if (v_PT == regexp(vc_sdp_remote.media_list[i].attributes[j].rtpmap.attr_value, "[ \t]#(0,)([\d]+)*", 0)) |
{ |
v_rtpmap := vc_sdp_remote.media_list[i].attributes[j]. |
rtpmap.attr_value; |
v_mediaAttributes[k] := {rtpmap := {attr_value := v_rtpmap}}; |
k := k+1; |
} // else line is not copied |
} |
else |
{ |
// simple copy of attribute |
v_mediaAttributes[k] := vc_sdp_remote.media_list[i].attributes[j]; |
k := k+1; |
} |
} |
vc_sdp_local.media_list[i].attributes := v_mediaAttributes; |
if (ispresent(vc_sdp_local.media_list[i].attributes)) |
{ |
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); |
}; |
} |
else |
{vc_sdp_local.attributes[0] := 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 |
log(vc_request.messageBody.sdpMessageBody);log(p_direction_in); |
if (not (ispresent(vc_request.messageBody) and (f_check_attribute(vc_request.messageBody.sdpMessageBody,p_direction_in) |
))) |
{log("than branch of if"); |
if ( |
match(valueof(p_direction_in),valueof(mw_attribute_sendrecv)) and |
not(f_check_attribute(vc_request.messageBody.sdpMessageBody,mw_attribute_sendrecv) or |
f_check_attribute(vc_request.messageBody.sdpMessageBody,mw_attribute_sendonly) or |
f_check_attribute(vc_request.messageBody.sdpMessageBody,mw_attribute_recvonly) or |
f_check_attribute(vc_request.messageBody.sdpMessageBody,mw_attribute_inactive) |
) |
){ |
log("no direction attributes with expectation: ", p_direction_in) |
} |
else {setverdict(fail);};} |
else {setverdict(pass);log("attribute found in message body");}; |
if (match(omit,p_direction_out))//not isvalue(v_direction_out))//MRO |
{v_direction_out := f_get_attribute_answer(vc_request.messageBody.sdpMessageBody, p_direction_in);} |
f_SIP_modMediaDirection(1, v_direction_out); // handling of attribute in media description |
f_SIP_modSessionDirection(v_direction_out); // handling of attribute in session |
} |
/* |
* |
* @desc check (from remote) and set (local) the session/media attribute lines on directions |
* @param p_direction_in incoming SDP attribute that need to be checked |
* @param p_direction_out SDP attribute that should be included in the SDP answer (to be returned to peer) |
* @return |
* @verdict |
*/ |
function f_SIP_checkResponsesetSDPreqDirection(template SDP_attribute p_direction_in, template SDP_attribute p_direction_out) runs on SipComponent |
{ var template SDP_attribute v_direction_out := p_direction_out; |
// check incoming SDP attribute |
log(vc_response.messageBody.sdpMessageBody);log(p_direction_in); |
if (not (ispresent(vc_response.messageBody) and (f_check_attribute(vc_response.messageBody.sdpMessageBody,p_direction_in) |
))) |
{log("than branch of if"); |
if ( |
match(valueof(p_direction_in),valueof(mw_attribute_sendrecv)) and |
not(f_check_attribute(vc_response.messageBody.sdpMessageBody,mw_attribute_sendrecv) or |
f_check_attribute(vc_response.messageBody.sdpMessageBody,mw_attribute_sendonly) or |
f_check_attribute(vc_response.messageBody.sdpMessageBody,mw_attribute_recvonly) or |
f_check_attribute(vc_response.messageBody.sdpMessageBody,mw_attribute_inactive) |
) |
){ |
log("no direction attributes with expectation: ", p_direction_in) |
} |
else {setverdict(fail);};} |
else {setverdict(pass);log("attribute found in message body");}; |
if (match(omit,p_direction_out))//not isvalue(v_direction_out))//MRO |
{v_direction_out := f_get_attribute_answer(vc_response.messageBody.sdpMessageBody, p_direction_in);} |
f_SIP_modMediaDirection(1, v_direction_out); // handling of attribute in media description |
f_SIP_modSessionDirection(v_direction_out); // handling of attribute in session |
} |
/* |
* |
* @desc check (from remote) and set (local) the session attribute lines on directions |
* @param p_direction_in incoming SDP attribute that need to be checked |
* @param p_direction_out SDP attribute that should be included in the SDP answer (to be returned to peer) |
* @return |
* @verdict |
*/ |
function f_SIP_checksetSDPreqDirectionSession(template SDP_attribute p_direction_in, template SDP_attribute p_direction_out) runs on SipComponent |
{ var template SDP_attribute v_direction_out := p_direction_out; |
// check incoming SDP attribute |
if (not (ispresent(vc_request.messageBody) and (f_check_session_attribute(vc_request.messageBody.sdpMessageBody,p_direction_in) |
))) |
{if ( |
match(valueof(mw_attribute_sendrecv),valueof(p_direction_in)) and |
not(f_check_session_attribute(vc_request.messageBody.sdpMessageBody,mw_attribute_sendrecv) or |
f_check_session_attribute(vc_request.messageBody.sdpMessageBody,mw_attribute_sendonly) or |
f_check_session_attribute(vc_request.messageBody.sdpMessageBody,mw_attribute_recvonly) or |
f_check_session_attribute(vc_request.messageBody.sdpMessageBody,mw_attribute_inactive) |
) |
){ |
log("no direction attributes with expectation: ", p_direction_in) |
} |
else {setverdict(fail);};}; |
if (match(omit,p_direction_out))//not isvalue(v_direction_out))//MRO |
{v_direction_out := f_get_attribute_answer(vc_request.messageBody.sdpMessageBody, p_direction_in);} |
f_SIP_modSessionDirection(v_direction_out); // handling of attribute in session |
} |
/* |
* |
* @desc check (from remote) and set (local) the session attribute lines on directions |
* @param p_direction_in incoming SDP attribute that need to be checked |
* @param p_direction_out SDP attribute that should be included in the SDP answer (to be returned to peer) |
* @return |
* @verdict |
*/ |
function f_SIP_checkResponsesetSDPreqDirectionSession(template SDP_attribute p_direction_in, template SDP_attribute p_direction_out) runs on SipComponent |
{ var template SDP_attribute v_direction_out := p_direction_out; |
// check incoming SDP attribute |
if (not (ispresent(vc_response.messageBody) and (f_check_session_attribute(vc_response.messageBody.sdpMessageBody,p_direction_in) |
))) |
{if ( |
match(valueof(mw_attribute_sendrecv),valueof(p_direction_in)) and |
not(f_check_session_attribute(vc_response.messageBody.sdpMessageBody,mw_attribute_sendrecv) or |
f_check_session_attribute(vc_response.messageBody.sdpMessageBody,mw_attribute_sendonly) or |
f_check_session_attribute(vc_response.messageBody.sdpMessageBody,mw_attribute_recvonly) or |
f_check_session_attribute(vc_response.messageBody.sdpMessageBody,mw_attribute_inactive) |
) |
){ |
log("no direction attributes with expectation: ", p_direction_in) |
} |
else {setverdict(fail);};}; |
if (match(omit,p_direction_out))//not isvalue(v_direction_out))//MRO |
{v_direction_out := f_get_attribute_answer(vc_response.messageBody.sdpMessageBody, p_direction_in);} |
f_SIP_modSessionDirection(v_direction_out); // handling of attribute in session |
} |
/* |
* |
* @desc check (from remote) and set (local)the session/media attribute lines on directions |
* @param p_direction_in attribute to be check |
* @param p_direction_out attrubyte to be |
* @return |
* @verdict |
*/ |
function f_SIP_checkSDPrespDirection(template SDP_attribute p_direction_in) runs on SipComponent |
{ |
// check incoming SDP attribute |
if (not (ispresent(vc_response.messageBody) and f_check_attribute(vc_response.messageBody.sdpMessageBody,p_direction_in))) |
{setverdict(fail);}; |
} |
/** |
* @desc check 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.connection)) |
{vc_sdp_local.connection := vc_sdp_remote.connection} |
else {vc_sdp_local.connection := omit}; |
vc_sdp_local.origin := vc_sdp_remote.origin; |
vc_sdp_local.session_name := vc_sdp_remote.session_name; |
if (ispresent(vc_sdp_remote.bandwidth)) |
{vc_sdp_local.bandwidth := vc_sdp_remote.bandwidth} |
else {vc_sdp_local.bandwidth := {}}; |
if (ispresent(vc_sdp_remote.media_list)) |
{ |
// // cleaning of media before assignment |
// if (ispresent(vc_sdp_local.media_list)) |
// { |
// for (var integer i:=0; i<sizeof(vc_sdp_local.media_list); i:=i+1) |
// { |
// vc_sdp_local.media_list[i] := omit ; |
// } |
// }; |
vc_sdp_local.media_list := vc_sdp_remote.media_list; |
} |
} |
}//end group SDPOperations |
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); |
} |
[] SIPP.receive(mw_SUBSCRIBE_Request_Base)-> value v_request sender vc_sent_label |
{ |
tc_wait.stop; |
setverdict(fail); |
f_setHeadersOnReceiptOfSUBSCRIBE(v_request); |
//f_send200OK(); |
} |
} |
} |
/** |
* |
* @desc function 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; |
} |
[vc_interface_isc]SIPP.receive (mw_INVITE_Request_Base) -> value v_INVITE_Request sender vc_sent_label |
{ |
tc_wait.stop; |
setverdict(fail); |
f_setHeadersOnReceiptOfINVITE(v_INVITE_Request); |
SIPP.send(m_Response_Base(c_statusLine100, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)) to vc_sent_label; |
//clear session - send 486 and await ACK |
f_sendResponse(m_Response_Base(c_statusLine486,vc_callId,vc_cSeq,vc_caller_From,vc_caller_To,vc_via)); |
f_awaitingACK(mw_ACK_Request_Base(?)); |
//await 486 which go towards and send ACK |
f_awaitingResponse(mw_Response_Base(c_statusLine486,?,?)); |
f_SendACK(m_ACK_Request_Base(vc_requestUri,vc_callId,vc_cSeq,vc_from,vc_to,vc_via)); |
syncPort.send(m_syncClientStop); |
stop |
} |
} |
} //end f_awaitingINVITE |
/** |
* |
* @desc function awaiting for an incoming INVITE |
* @param p_request expected message |
*/ |
function f_awaitingINVITE_No100Response(template 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 |
*/ |
function f_awaitingNOTIFY(in template NOTIFY_Request p_MSG) runs on SipComponent |
{ |
var NOTIFY_Request v_MSG; |
tc_wait.start(PX_SIP_TWAIT); |
alt |
{ |
[] SIPP.receive(p_MSG)-> value v_MSG sender vc_sent_label |
{ |
tc_wait.stop; |
f_getRouteMapIntoRecordRoute(vc_cSeq, v_MSG); |
f_setHeadersOnReceiptOfRequest(v_MSG); |
} |
} |
} // end of f_awaitingNOTIFY |
/** |
* @desc await NOTIFY request |
* reply with 200 OK |
*/ |
function f_awaitingNOTIFY_sendReply(in template NOTIFY_Request p_MSG) runs on SipComponent |
{ |
var NOTIFY_Request v_MSG; |
tc_wait.start(PX_SIP_TWAIT); |
alt |
{ |
[] SIPP.receive(p_MSG)-> value v_MSG sender vc_sent_label |
{ |
tc_wait.stop; |
f_getRouteMapIntoRecordRoute(vc_cSeq, v_MSG); |
f_setHeadersOnReceiptOfRequest(v_MSG); |
//Answer to the NOTIFY |
f_send200OK(); |
} |
} |
} // end of f_awaitingNOTIFY_sendReply |
/** |
* @desc await PRACK request |
* reply with 200 OK |
*/ |
function f_awaitingPRACK_sendReply(in template PRACK_Request p_MSG) runs on SipComponent |
{ |
var PRACK_Request v_MSG; |
tc_wait.start(PX_SIP_TWAIT); |
alt |
{ |
[] SIPP.receive(p_MSG)-> value v_MSG sender vc_sent_label |
{ |
tc_wait.stop; |
f_setHeadersOnReceiptOfRequest(v_MSG); |
//Answer to the PRACK |
f_send200OK(); |
} |
} |
} // end of f_awaitingPRACK_sendReply |
/** |
* @desc await PUBLISH request |
* reply with 200 OK |
*/ |
function f_awaitingPUBLISH_sendReply(in template PUBLISH_Request p_MSG) runs on SipComponent |
{ |
var PUBLISH_Request v_MSG; |
tc_wait.start(PX_SIP_TWAIT); |
alt |
{ |
[] SIPP.receive(p_MSG)-> value v_MSG sender vc_sent_label |
{ |
tc_wait.stop; |
f_setHeadersOnReceiptOfRequest(v_MSG); |
//Answer to the PUBLISH |
f_send200OK(); |
} |
} |
} // end of f_awaitingPUBLISH_sendReply |
/** |
* @desc await UPDATE request |
*/ |
function f_awaitingUPDATE(in template UPDATE_Request p_MSG) runs on SipComponent |
{ |
var UPDATE_Request v_MSG; |
tc_wait.start(PX_SIP_TWAIT); |
alt |
{ |
[] SIPP.receive(p_MSG)-> value v_MSG sender vc_sent_label |
{ |
tc_wait.stop; |
f_setHeadersOnReceiptOfRequest(v_MSG); |
} |
} |
} // end of f_awaitingUPDATE |
/** |
* @desc await UPDATE request |
* reply with 200 OK |
*/ |
function f_awaitingUPDATE_sendReply(in template UPDATE_Request p_MSG) runs on SipComponent |
{ |
var UPDATE_Request v_MSG; |
tc_wait.start(PX_SIP_TWAIT); |
alt |
{ |
[] SIPP.receive(p_MSG)-> value v_MSG sender vc_sent_label |
{ |
tc_wait.stop; |
f_setHeadersOnReceiptOfRequest(v_MSG); |
//Answer to the UPDATE |
f_send200OK(); |
} |
} |
} // end of f_awaitingUPDATE_sendReply |
/** |
* @desc await REFER request |
*/ |
function f_awaitingREFER(in template REFER_Request p_MSG) runs on SipComponent |
{ |
var REFER_Request v_MSG; |
tc_wait.start(PX_SIP_TWAIT); |
alt |
{ |
[] SIPP.receive(p_MSG)-> value v_MSG sender vc_sent_label |
{ |
tc_wait.stop; |
f_setHeadersOnReceiptOfREFER(v_MSG); |
} |
} |
} // end of f_awaitingUPDATE |
} // end AwaitingMessage |
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; |
vc_request := valueof(p_request); |
if(PX_SIP_INVITE_AUTHENTICATION_ENABLED) {a_altstep_401or407();}; |
} |
/** |
* |
* @desc send PRACK message |
* @param p_request template of the message to be sent |
*/ |
function f_SendPRACK() runs on SipComponent |
{ |
vc_rAck := valueof(m_RAck(vc_response.msgHeader.rSeq.responseNum, vc_cSeq.seqNumber, vc_cSeq.method)); |
f_setHeadersGeneral(vc_cSeq, "PRACK"); // cseq, contact, branch, via |
SIPP.send(m_PRACK_Request_Base( |
vc_requestUri, |
vc_callId, |
vc_cSeq, |
vc_from, |
vc_to, |
vc_via, |
vc_rAck |
)) to vc_sent_label; |
} |
/** |
* |
* @desc send 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); //TODO need if p_register not set |
p_register := m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization); |
f_SendREGISTER(p_register); //LibSip |
//awaiting of 401 and sending 2nd REGISTER and awaiting 200 OK REGISTER |
if (p_auth) |
{ |
// receiving 401 Unauthorized response. |
// and Re-send REGISTER request with Authorization header |
tc_resp.start(PX_SIP_TRESP); |
alt |
{ |
[] SIPP.receive (mw_Response_Base(c_statusLine401, vc_callId, p_cSeq_s)) -> value vc_response |
{ |
tc_resp.stop; |
f_setHeadersOnReceiptOfResponse(p_cSeq_s, vc_response); |
// set headers via, cseq and authorization |
f_setHeaders_2ndREGISTER(p_cSeq_s); |
p_register := m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization); |
// Re-send protected REGISTER |
f_SendREGISTER(p_register);//LibSip |
// awaiting 200 OK REGISTER |
f_awaitingOkResponse(p_cSeq_s); |
f_getServiceRouteMapIntoRouteInRegistration(p_cSeq_s, vc_response); |
} |
[] SIPP.receive (mw_Response_Base(c_statusLine200, vc_callId, p_cSeq_s)) -> value vc_response |
{ |
tc_resp.stop; |
f_setHeadersOnReceiptOfResponse(vc_cSeq, vc_response); |
f_getServiceRouteMapIntoRouteInRegistration(p_cSeq_s, vc_response); |
log ("Authorization was not requested as expected"); |
} |
} |
} |
else |
{ |
f_awaitingOkResponse(p_cSeq_s); |
f_getServiceRouteMapIntoRouteInRegistration(p_cSeq_s, vc_response); |
} |
}; |
}//end function f_Registration |
/** |
* |
* @desc registration and authentication with MD5 |
* @param p_cSeq_s cseq parameter |
* @param p_register register template |
* @param p_auth flag indicating if authentication is needed |
*/ |
function f_Registration_withTemplate(inout CSeq p_cSeq_s, inout template REGISTER_Request p_register, in boolean p_auth) runs on SipComponent |
{ |
if (PX_SIP_REGISTRATION) |
{ |
//f_setHeaders_REGISTER(p_cSeq_s); TODO need if p_register not set |
//p_register := m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization); |
f_SendREGISTER(p_register); //LibSip |
//awaiting of 401 and sending 2nd REGISTER and awaiting 200 OK REGISTER |
if (p_auth) |
{ |
// receiving 401 Unauthorized response. |
// and Re-send REGISTER request with Authorization header |
tc_resp.start(PX_SIP_TRESP); |
alt |
{ |
[] SIPP.receive (mw_Response_Base(c_statusLine401, vc_callId, p_cSeq_s)) -> value vc_response |
{ |
tc_resp.stop; |
f_setHeadersOnReceiptOfResponse(p_cSeq_s, vc_response); |
// set headers via, cseq and authorization |
f_setHeaders_2ndREGISTER(p_cSeq_s); |
//p_register := m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization); |
// Re-send protected REGISTER |
p_register.requestLine.requestUri := vc_requestUri; |
p_register.msgHeader.cSeq := vc_cSeq; |
p_register.msgHeader.via := vc_via_REG; |
p_register.msgHeader.authorization := vc_authorization; |
f_SendREGISTER(p_register);//LibSip |
// awaiting 200 OK REGISTER |
f_awaitingOkResponse(p_cSeq_s); |
f_getServiceRouteMapIntoRouteInRegistration(p_cSeq_s, vc_response); |
} |
[] SIPP.receive (mw_Response_Base(c_statusLine200, vc_callId, p_cSeq_s)) -> value vc_response |
{ |
tc_resp.stop; |
f_setHeadersOnReceiptOfResponse(vc_cSeq, vc_response); |
f_getServiceRouteMapIntoRouteInRegistration(p_cSeq_s, vc_response); |
log ("Authorization was not requested as expected"); |
} |
} |
} |
else |
{ |
f_awaitingOkResponse(p_cSeq_s); |
f_getServiceRouteMapIntoRouteInRegistration(p_cSeq_s, vc_response); |
} |
}; |
}//end function f_Registration_withTemplate |
/** |
* |
* @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,?, ?)) |
{ |
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, valueof(vc_route))); |
repeat |
} |
[vc_ignore200OKinv] SIPP.receive(mw_Response_Base(c_statusLine200, vc_callId, ?)) |
{ |
repeat |
} |
[] SIPP.receive(mw_INFO_Request_Base(vc_callId))->value v_request sender vc_sent_label |
{ |
f_setHeadersOnReceiptOfRequest(v_request); |
f_send200OK(); |
repeat |
} |
// awaiting of Notify |
[] SIPP.receive(mw_NOTIFY_Request_Base(vc_callId))->value v_request sender vc_sent_label |
{ |
f_setHeadersOnReceiptOfRequest(v_request); |
f_send200OK(); |
repeat |
} |
// awaiting of subscribe from UE |
[vc_ignore_subscribe] SIPP.receive(mw_SUBSCRIBE_Request_Base)-> value v_request sender vc_sent_label |
{ |
f_setHeadersOnReceiptOfSUBSCRIBE(v_request); |
f_send200OK(); |
repeat; |
} |
//awaiting of subscribe on proxy |
[] SIPP.receive(mw_SUBSCRIBE_Request_Base)->value v_request sender vc_sent_label |
{ |
f_setHeadersOnReceiptOfRequest(v_request); |
f_sendResponse(m_Response_Contact(c_statusLine200,vc_callId, vc_cSeq,vc_callee_From, vc_callee_To, vc_via,vc_contact)); |
//f_setHeadersGeneral(vc_cSeq, "NOTIFY"); // cseq, contact, branch, via |
//f_SendNOTIFY(m_NOTIFY_Request_contact(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact)); |
log(v_request.msgHeader.contact.contactBody.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 |
Property changes: |
Added: svn:keywords |
## -0,0 +1 ## |
+Id |
\ No newline at end of property |
Index: v2.0.0/ttcn/LibSip_Templates.ttcn |
=================================================================== |
--- v2.0.0/ttcn/LibSip_Templates.ttcn (nonexistent) |
+++ v2.0.0/ttcn/LibSip_Templates.ttcn (revision 552) |
@@ -0,0 +1,3738 @@ |
+/* |
+ * @author STF 346, STF366, STF368, STF369, STF450 |
+ * @version $Id$ |
+ * @desc This module defines SIP Templates for message, header, and |
+ * structured types. <br> |
+ * Note that any changes made to the definitions in this module |
+ * may be overwritten by future releases of this library |
+ * End users are encouraged to contact the distributers of this |
+ * module regarding their modifications or additions. |
+ * This module is part of LibSipV2. |
+ * @remark Any additions to the templates shall follow the design rules |
+ * and always modify base templates only; |
+ * Existing templates shall not be changed or removed - |
+ * change requests shall be made to http://t-ort.etsi.org |
+ */ |
+ |
+module LibSip_Templates |
+{ |
+ //LibSip |
+ import from LibSip_SIPTypesAndValues all; |
+ import from LibSip_SDPTypes all; |
+ import from LibSip_Interface all; |
+ import from LibSip_PIXITS all; |
+ import from LibSip_XMLTypes all; |
+ import from LibSip_SimpleMsgSummaryTypes all; |
+ import from LibSip_MessageBodyTypes all; |
+ |
+ import from NoTargetNamespace language "XSD" all |
+ with { |
+ extension "File:../xsd/Ims3gpp.xsd" |
+ } |
+ |
+ import from urn_ietf_params_xml_ns_conference_info language "XSD" all |
+ with { |
+ extension "File:../xsd/CONF.xsd" |
+ } |
+ |
+ import from http_uri_etsi_org_ngn_params_xml_simservs_pstn language "XSD" all |
+ with { |
+ extension "File:../xsd/PSTN.xsd" |
+ } |
+ |
+ import from http_uri_etsi_org_ngn_params_xml_simservs_xcap language "XSD" all |
+ with { |
+ extension "File:../xsd/SupplementaryServices.xsd" |
+ } |
+ |
+ import from http_uri_etsi_org_ngn_params_xml_simservs_mcid language "XSD" all |
+ with { |
+ extension "File:../xsd/MCID.xsd" |
+ } |
+ |
+ import from urn_ietf_params_xml_ns_resource_lists language "XSD" all |
+ with { |
+ extension "File:../xsd/ResourceList.xsd" |
+ } |
+ |
+ import from http_uri_etsi_org_ngn_params_xml_comm_div_info language "XSD" all |
+ with { |
+ extension "File:../xsd/CDIVN.xsd" |
+ } |
+ |
+ import from urn_3gpp_ns_cw_1_0 language "XSD" all |
+ with { |
+ extension "File:../xsd/cw.xsd" |
+ } |
+ |
+ group ModuleParameters { |
+ |
+ modulepar boolean MB_LENGTH_FROM_ENCVAL:=false; //* to get length of message body from ecoded value |
+ modulepar boolean USE_FX_FOR_XML_LENGTH:=false; //* To use external functions for calculation of XML message/body length |
+ |
+ }//* group ModuleParameters |
+ |
+ group SubFields |
+ { |
+ |
+ template Addr_Union m_AddrUnion_NameAddr(template NameAddr p_nameAddr) := |
+ { |
+ nameAddr := p_nameAddr |
+ } |
+ |
+ 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" |
+ components := {sip:={ |
+ userInfo := //* optional |
+ { |
+ userOrTelephoneSubscriber := p_userprofile.publUsername,//* charstring |
+ password := omit //* optional charstring |
+ }, |
+ hostPort := |
+ { |
+ host := p_userprofile.homeDomain, //* hostname, IPv4 or IPv6 as a charstring |
+ portField := omit //* p_userprofile.currPort //* optional integer |
+ }}}, |
+ urlParameters := omit, |
+ headers := omit |
+ } |
+ |
+ template SipUrl m_SipUrl_contactIpaddr(in SipUserProfile p_userprofile) := //* SIP-URL of the test system on SIP side |
+ { |
+ scheme := c_sipScheme, //* contains "sip" |
+ components := {sip:={ |
+ userInfo := //* optional |
+ { |
+ userOrTelephoneSubscriber := p_userprofile.publUsername,//* charstring |
+ password := omit //* optional charstring |
+ }, |
+ hostPort := |
+ { |
+ host := p_userprofile.contactIpaddr, //* hostname, IPv4 or IPv6 as a charstring |
+ portField := p_userprofile.contactPort //* optional integer |
+ }}}, |
+ urlParameters := omit, |
+ headers := omit |
+ } |
+ |
+ template SipUrl m_SipUrl_contactIpaddrAndCpc(in SipUserProfile p_userprofile) := //* SIP-URL of the test system on SIP side |
+ { |
+ scheme := c_sipScheme, //* contains "sip" |
+ components := {sip:={ |
+ userInfo := //* optional |
+ { |
+ userOrTelephoneSubscriber := p_userprofile.publUsername & "; cpc=" & PX_SIP_ISUP_CPC_VALUE,//* charstring |
+ password := omit //* optional charstring |
+ }, |
+ hostPort := |
+ { |
+ host := p_userprofile.contactIpaddr, //* hostname, IPv4 or IPv6 as a charstring |
+ portField := p_userprofile.contactPort //* optional integer |
+ }}}, |
+ urlParameters := omit, |
+ headers := omit |
+ } |
+ |
+ template SipUrl m_SipUrl_currIpaddr(in SipUserProfile p_userprofile) := //* SIP-URL of the test system on SIP side |
+ { |
+ scheme := c_sipScheme, //* contains "sip" |
+ components := {sip:={ |
+ userInfo := //* optional |
+ { |
+ userOrTelephoneSubscriber := p_userprofile.publUsername,//* charstring |
+ password := omit //* optional charstring |
+ }, |
+ hostPort := |
+ { |
+ host := p_userprofile.currIpaddr, //* hostname, IPv4 or IPv6 as a charstring |
+ portField := p_userprofile.currPort //* optional integer |
+ }}}, |
+ urlParameters := omit, |
+ headers := omit |
+ } |
+ |
+ template SipUrl m_SipUrl_Anonymous := //* SIP-URL with a calles party number |
+ { |
+ scheme := c_sipScheme, //* contains "sip" |
+ components := {sip:={ |
+ userInfo := //* optional |
+ { |
+ userOrTelephoneSubscriber := "Anonymous",//* charstring |
+ password := omit //* optional charstring |
+ }, |
+ hostPort := |
+ { |
+ host := "Anonymous.invalid", //* hostname, IPv4 or IPv6 as a charstring |
+ portField := omit //* optional integer |
+ }}}, |
+ urlParameters := omit, |
+ headers := omit |
+ }; |
+ |
+ template SipUrl m_TelUrl_publUser(in SipUserProfile p_userprofile) := //* SIP-URL of the test system on SIP side |
+ { |
+ scheme := c_telScheme, //* contains "tel" |
+ components := {tel:={ |
+ subscriber := p_userprofile.publUsername//* charstring |
+ }}, |
+ urlParameters := omit, |
+ headers := omit |
+ } |
+ |
+ template SipUrl mw_TelUrl := |
+ { |
+ scheme := c_telScheme, |
+ components := {tel:={ |
+ subscriber := ?}}, |
+ urlParameters := *, |
+ headers := * |
+ }; |
+ |
+ template SipUrl mw_SipUrl := |
+ { |
+ scheme := c_sipScheme, |
+ components := {sip:={ |
+ userInfo := *, |
+ hostPort := ?}}, |
+ urlParameters := *, |
+ headers := * |
+ }; |
+ |
+ template SipUrl mw_TelSip_unavailableInvalidUri := (mw_TelSip_unavailableInvalidUri1,mw_TelSip_unavailableInvalidUri2); |
+ |
+ template SipUrl mw_TelSip_unavailableInvalidUri1 := |
+ { |
+ scheme := c_sipScheme, |
+ components := {sip:={ |
+ userInfo := {userOrTelephoneSubscriber:="unavailable", password:=omit}, |
+ hostPort := {host:="anonymous.invalid", portField:=c_defaultSipPort} |
+ }}, |
+ urlParameters := omit, |
+ headers := omit |
+ }; |
+ template SipUrl mw_TelSip_unavailableInvalidUri2 := |
+ { |
+ scheme := c_telScheme, |
+ components := {tel:={ |
+ subscriber := "unavailable" |
+ }}, |
+ urlParameters := omit, |
+ headers := omit |
+ }; |
+ |
+ template SipUrl mw_TelSip_unavailableUri (charstring p_host):= (mw_TelSip_unavailableUri1 (p_host),mw_TelSip_unavailableUri2 (p_host)); |
+ |
+ template SipUrl mw_TelSip_unavailableUri1 (charstring p_host):= |
+ { |
+ scheme := (c_telScheme), |
+ components := {tel:={ |
+ subscriber := "unavailable"}}, |
+ urlParameters := omit, |
+ headers := omit |
+ }; |
+ template SipUrl mw_TelSip_unavailableUri2 (charstring p_host):= |
+ { |
+ scheme := (c_sipScheme), |
+ components := {sip:={ |
+ userInfo := {userOrTelephoneSubscriber:="unavailable", password:=omit}, |
+ hostPort := {host:=p_host, portField:=c_defaultSipPort}}}, |
+ urlParameters := omit, |
+ headers := omit |
+ }; |
+ |
+ template SipUrl mw_SipUrl_Number(charstring p_number) := //* SIP-URL with a calling party number |
+ { |
+ scheme := c_sipScheme, //* contains "sip" |
+ components := {sip:={ |
+ userInfo:= {userOrTelephoneSubscriber:=p_number, password:=*}, |
+ hostPort := ?}}, |
+ urlParameters := *, |
+ headers := * |
+ }; |
+ |
+ template SipUrl mw_TelSipUrl_Number(template charstring p_number) := (mw_TelSipUrl_Number1(p_number),mw_TelSipUrl_Number2(p_number)); |
+ |
+ template SipUrl mw_TelSipUrl_Number1(template charstring p_number) := //* SIP-URL with a calling party number |
+ { |
+ scheme := (c_sipScheme), //* contains "sip" or "tel" |
+ components := { |
+ |
+ sip:={ |
+ userInfo:= {userOrTelephoneSubscriber:=p_number, password:=*}, //* nat or int format |
+ hostPort := ?} |
+ |
+ }, |
+ urlParameters := *, |
+ headers := * |
+ }; |
+ template SipUrl mw_TelSipUrl_Number2(template charstring p_number) := //* SIP-URL with a calling party number |
+ { |
+ scheme := (c_telScheme), //* contains "sip" or "tel" |
+ components := { |
+ |
+ tel:={ |
+ subscriber:= p_number} |
+ }, |
+ urlParameters := *, |
+ headers := * |
+ }; |
+ |
+ template SipUrl mw_SipUrl_Host(template charstring p_host) := //* SIP-URL with a calling party number |
+ { |
+ scheme := c_sipScheme, //* contains "sip" |
+ components := {sip:={ |
+ userInfo:= *, |
+ hostPort := {host:=p_host, portField:=*}}}, |
+ urlParameters := *, |
+ headers := * |
+ }; |
+ |
+ |
+ template SipUrl mw_SipUrl_NumberHost(charstring p_number, charstring p_host) := //* SIP-URL with a calling party number |
+ { |
+ scheme := c_sipScheme, //* contains "sip" |
+ components := {sip:={ |
+ userInfo:= {userOrTelephoneSubscriber:=p_number, password:=*}, |
+ hostPort := {host:=p_host, portField:=*}}}, |
+ urlParameters := *, |
+ headers := * |
+ }; |
+ |
+ template SipUrl mw_SipUrl_NumberHostParam(charstring p_number, charstring p_host, template SemicolonParam_List p_urlParameters) := //* SIP-URL with a calling party number |
+ { |
+ scheme := c_sipScheme, //* contains "sip" |
+ components := {sip:={ |
+ userInfo:= {userOrTelephoneSubscriber:=p_number, password:=*}, |
+ hostPort := {host:=p_host, portField:=*}}}, |
+ urlParameters := p_urlParameters, |
+ headers := * |
+ }; |
+ |
+ template SipUrl m_SipUrl_NumberHostHeader(charstring p_number, charstring p_host, template AmpersandParam_List p_urlParameters) := //* SIP-URL with a calling party number |
+ { |
+ scheme := c_sipScheme, //* contains "sip" |
+ components := {sip:={ |
+ userInfo:= {userOrTelephoneSubscriber:=p_number, password:=omit}, |
+ hostPort := {host:=p_host, portField:=omit}}}, |
+ urlParameters := omit, |
+ headers := p_urlParameters |
+ }; |
+ |
+ template SipUrl mw_SipUrl_NumberHostHeader(charstring p_number, charstring p_host, template AmpersandParam_List p_urlParameters) := //* SIP-URL with a calling party number |
+ { |
+ scheme := c_sipScheme, //* contains "sip" |
+ components := {sip:={ |
+ userInfo:= {userOrTelephoneSubscriber:=p_number, password:=*}, |
+ hostPort := {host:=p_host, portField:=*}}}, |
+ urlParameters := *, |
+ headers := p_urlParameters |
+ }; |
+ |
+ template SipUrl m_SipUrl_NumberHostParam(charstring p_number, charstring p_host, template SemicolonParam_List p_urlParameters) := //* SIP-URL with a calling party number |
+ { |
+ scheme := c_sipScheme, //* contains "sip" |
+ components := {sip:={ |
+ userInfo:= {userOrTelephoneSubscriber:=p_number, password:=omit}, |
+ hostPort := {host:=p_host, portField:=c_defaultSipPort}}}, |
+ urlParameters := p_urlParameters, |
+ headers := omit |
+ }; |
+ |
+ template SipUrl m_SipUrl_NumberHostParam_woPort(charstring p_number, charstring p_host, template SemicolonParam_List p_urlParameters) := //* SIP-URL with a calling party number |
+ { |
+ scheme := c_sipScheme, //* contains "sip" |
+ components := {sip:={ |
+ userInfo:= {userOrTelephoneSubscriber:=p_number, password:=omit}, |
+ hostPort := {host:=p_host, portField:=omit}}}, |
+ urlParameters := p_urlParameters, |
+ headers := omit |
+ }; |
+ |
+ template SipUrl mw_SipUrl_Anonymous := //* SIP-URL with a calles party number |
+ { |
+ scheme := c_sipScheme, //* contains "sip" |
+ components := {sip:={ |
+ userInfo := //* optional |
+ { |
+ userOrTelephoneSubscriber := pattern "[a,A][n,N][o,O][n,N][y,Y][m,M][o,O][u,U][s,s]",//* charstring |
+ password := omit //* optional charstring |
+ }, |
+ hostPort := |
+ { |
+ host := pattern "[a,A]nonymous.invalid", //* hostname, IPv4 or IPv6 as a charstring |
+ portField := * //* optional integer |
+ }}}, |
+ urlParameters := *, |
+ headers := * |
+ }; |
+ |
+ template SipUrl mw_SipUrl_urlParam(template SemicolonParam_List p_urlParameters) := //* SIP-URL with a calling party number |
+ { |
+ scheme := c_sipScheme, //* contains "sip" |
+ components := {sip:={ |
+ userInfo:= *, |
+ hostPort := ?}}, |
+ urlParameters := p_urlParameters, |
+ headers := * |
+ }; |
+ |
+ template ContactAddress mw_ContactAddress := |
+ { |
+ addressField := ?, |
+ contactParams := * |
+ }; |
+ |
+ template 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" |
+ components := { sip := { |
+ userInfo := {userOrTelephoneSubscriber :=p_user, password := *}, |
+ hostPort := |
+ { |
+ host := p_host, //* hostname, IPv4 or IPv6 as a charstring |
+ portField := * //* optional integer |
+ }} |
+ }, |
+ urlParameters := {m_UserPhone}, |
+ headers := * |
+ } |
+ } |
+ |
+ template Addr_Union mw_AddrUnion_Nameaddr(template charstring p_dn, template charstring p_user, template charstring p_host):= |
+ { |
+ nameAddr:=mw_NameAddr_DispName_User_Host(p_dn,p_user,p_host) |
+ } |
+ |
+ template SipUrl mw_SipUrl_User_Host(template charstring p_user, template charstring p_host) := |
+ { |
+ scheme := c_sipScheme, //* contains "sip" |
+ components := {sip:={ |
+ userInfo := {userOrTelephoneSubscriber :=p_user, password := *}, |
+ hostPort := |
+ { |
+ host := p_host, //* hostname, IPv4 or IPv6 as a charstring |
+ portField := * //* optional integer |
+ }}}, |
+ urlParameters := {m_UserPhone}, |
+ headers := * |
+ } |
+ template Addr_Union mw_AddrUnion_SipUrl(template charstring p_user, template charstring p_host):= |
+ { |
+ addrSpecUnion:=mw_SipUrl_User_Host(p_user,p_host) |
+ } |
+ |
+ |
+ } //* 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:= p_cause} |
+ {id:=?, paramValue:= pattern "*{p_cause}*"} // TODO - Expression does not work for all TTCN tools |
+ |
+ 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 StringList p_index, template SemicolonParam_List p_paramlist) := |
+ { |
+ nameAddr := {displayName:=*, addrSpec:= p_Url}, |
+ hiIndex := p_index, |
+ hiExtention := p_paramlist |
+ } |
+ |
+ template HistoryInfo m_HistoryInfo(template HistoryInfo_List p_HistoryInfo_List) := |
+ { |
+ fieldName := HISTORY_INFO_E, |
+ historyInfoList := p_HistoryInfo_List |
+ }; |
+ |
+ template HistoryInfoEntry m_HistoryInfoEntry(template SipUrl p_Url, template StringList p_index, template SemicolonParam_List p_paramlist) := |
+ { |
+ nameAddr := {displayName:=omit, addrSpec:= p_Url}, |
+ hiIndex := p_index, |
+ hiExtention := p_paramlist |
+ } |
+ |
+ template PAssertedID m_PAssertedID_2x(template Addr_Union p_pAssertedIDValue1, template Addr_Union p_pAssertedIDValue2) := |
+ { |
+ fieldName := P_ASSERTED_ID_E, |
+ pAssertedIDValueList := {p_pAssertedIDValue1, p_pAssertedIDValue2} |
+ }; |
+ |
+ template PAssertedID mw_PAssertedID(template PAssertedIDValue p_pAssertedIDValue) := |
+ { |
+ fieldName := P_ASSERTED_ID_E, |
+ pAssertedIDValueList := {p_pAssertedIDValue} |
+ }; |
+ |
+ template 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" |
+ components := { sip := { |
+ userInfo := omit, |
+ hostPort := {host:=p_userprofile.currIpaddr, portField:= p_userprofile.currPort}}}, |
+ urlParameters := omit, |
+ headers := omit} |
+ }, |
+ rrParam := omit} |
+ }}; |
+ |
+ template RouteBody m_routeBody_currIpAddr (in SipUserProfile p_userprofile):= |
+ { |
+ nameAddr := { |
+ displayName := omit, |
+ addrSpec := { |
+ scheme := c_sipScheme, //* contains "sip" |
+ components := { |
+ sip := { |
+ userInfo := omit, |
+ hostPort := {host:=p_userprofile.homeDomain, portField:= p_userprofile.currPort} |
+ } |
+ }, |
+ 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 ReferSub m_ReferSub(in boolean p_value) := |
+ { |
+ fieldName := REFER_SUB_E, |
+ referSubValue :=p_value, |
+ referSubParams := omit |
+ } |
+ |
+ 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(template charstring p_cause) := |
+ { |
+ fieldName := REASON_E, |
+ reasonValues := {m_ReasonValue(p_cause,?)} |
+ }; |
+ |
+ template Reason mw_ReasonSIP(template charstring p_cause) := |
+ { |
+ fieldName := REASON_E, |
+ reasonValues := {m_ReasonValueSIP(p_cause,?)} |
+ }; |
+ |
+ template Require mw_Require_not_100rel := |
+ { |
+ fieldName := REQUIRE_E, |
+ optionsTags := superset(complement(c_tag100rel)) |
+ }; |
+ |
+ template Require mw_require_100rel := |
+ { |
+ fieldName := REQUIRE_E, |
+ optionsTags := superset(c_tag100rel) |
+ }; |
+ |
+ template 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 := { |
+ nameAddr := { |
+ displayName := *, |
+ addrSpec := { |
+ scheme := ?, |
+ components := ?, |
+ urlParameters := {{"isfocus",*},*}, |
+ headers := * |
+ } |
+ } |
+ }, |
+ contactParams := * |
+ } |
+ } |
+ } |
+ } |
+ |
+ template AlertInfo m_AlertInfo(charstring p_urn) := { |
+ fieldName := ALERT_INFO_E, |
+ alertInfoBody := {{p_urn, omit}} |
+ } |
+ |
+ template AlertInfo mw_AlertInfo(template charstring p_urn) := { |
+ fieldName := ALERT_INFO_E, |
+ alertInfoBody := superset({p_urn, omit}) |
+ } |
+ } //* end of group HeaderFieldTemplates |
+ |
+ |
+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, |
+ geolocation := omit, |
+ geolocationRouting := omit, |
+ historyInfo := omit, //* RFC4244 |
+ inReplyTo := omit, |
+ maxForwards := c_maxForwards70, |
+ mimeVersion := omit, |
+ minExpires := omit, |
+ minSE := omit, //* RFC4028 |
+ organization := omit, |
+ pAccessNetworkInfo := omit, //* RFC3455 |
+ pAssertedID := omit, |
+ pAssertedService := omit, |
+ pAssociatedURI := omit, |
+ path := omit, //* RFC3327 |
+ pCalledPartyID := omit, //* RFC3455 |
+ pChargingFunctionAddresses := omit, //* RFC3455 |
+ pChargingVector := omit, //* RFC3455 |
+ pEarlyMedia := omit, //* RFC5009 |
+ pMediaAuthorization := omit, //* RFC3313 |
+ pPreferredID := omit, |
+ pPreferredService := omit, |
+ priority := omit, |
+ privacy := omit, |
+ proxyAuthenticate := omit, |
+ proxyAuthorization := omit, |
+ proxyRequire := omit, |
+ pVisitedNetworkID := omit, //* RFC3455 |
+ rAck := omit, |
+ rSeq := omit, |
+ reason := omit, |
+ recordRoute := omit, |
+ requestDisposition := omit, |
+ referredBy := omit, //* RFC3892 - REFER method |
+ referTo := omit, //* RFC3515 - REFER method |
+ referSub := omit, //* RFC4488 - REFER method |
+ replaces := omit, //* RFC3891 |
+ replyTo := omit, |
+ require := omit, |
+ retryAfter := omit, |
+ route := omit, |
+ securityClient := omit, //* RFC3329 |
+ securityServer := omit, //* RFC3329 |
+ securityVerify := omit, //* RFC3329 |
+ server := omit, |
+ serviceRoute := omit, //* RFC3608 |
+ sessionExpires := omit, //* RFC4028 |
+ sessionId := omit, |
+ sipETag := omit, |
+ sipIfMatch := omit, |
+ subject := omit, |
+ subscriptionState := omit, //* RFC3265 |
+ supported := omit, |
+ timestamp := omit, |
+ toField := c_empty_To, |
+ unsupported := omit, |
+ userToUser := omit, |
+ userAgent := omit, |
+ via := c_empty_Via, |
+ warning := omit, |
+ wwwAuthenticate := omit, |
+ undefinedHeader_List := omit |
+ } |
+ } //* group dummy_parameter_send |
+ |
+ group dummy_parameter_receive { |
+ |
+ template 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 := ?, |
+ geolocation := *, |
+ geolocationRouting := *, |
+ historyInfo := *, //* RFC4244 |
+ inReplyTo := *, |
+ maxForwards := *, |
+ mimeVersion := *, |
+ minExpires := *, |
+ minSE := *, //* RFC4028 |
+ organization := *, |
+ pAccessNetworkInfo := *, //* RFC3455 |
+ pAssertedID := *, |
+ pAssertedService := *, |
+ pAssociatedURI := *, |
+ path := *, //* RFC3327 |
+ pCalledPartyID := *, //* RFC3455 |
+ pChargingFunctionAddresses := *, //* RFC3455 |
+ pChargingVector := *, //* RFC3455 |
+ pEarlyMedia := *, //* RFC5009 |
+ pMediaAuthorization := *, //* RFC3313 |
+ pPreferredID := *, |
+ pPreferredService := *, |
+ priority := *, |
+ privacy := *, |
+ proxyAuthenticate := *, |
+ proxyAuthorization := *, |
+ proxyRequire := *, |
+ pVisitedNetworkID := *, //* RFC3455 |
+ rAck := *, |
+ rSeq := *, |
+ reason := *, |
+ recordRoute := *, |
+ requestDisposition := *, |
+ referredBy := *, //* RFC3892 - REFER method |
+ referTo := *, //* RFC3515 - REFER method |
+ referSub := *, //* RFC4488 - REFER method |
+ replaces := *, //* RFC 3891 |
+ replyTo := *, |
+ require := *, |
+ retryAfter := *, |
+ route := *, |
+ securityClient := *, //* RFC3329 |
+ securityServer := *, //* RFC3329 |
+ securityVerify := *, //* RFC3329 |
+ server := *, |
+ serviceRoute := *, //* RFC3608 |
+ sessionExpires := *, //* RFC4028 |
+ sessionId := *, |
+ sipETag := *, |
+ sipIfMatch := *, |
+ subject := *, |
+ subscriptionState := *, //* RFC3265 |
+ supported := *, |
+ timestamp := *, |
+ toField := ?, |
+ unsupported := *, |
+ userToUser := *, |
+ userAgent := *, |
+ via := ?, |
+ warning := *, |
+ wwwAuthenticate := *, |
+ undefinedHeader_List := * |
+ } |
+ }//* end group dummy_parameter_receive |
+ |
+ group dummy_request_templates_send { |
+ |
+ template 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 OPTIONS_Request m_OPTIONS_Dummy := |
+ { |
+ requestLine := m_requestLine_dummy(OPTIONS_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 OPTIONS_Request mw_OPTIONS_Dummy := |
+ { |
+ requestLine := mw_requestLine_dummy(OPTIONS_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 OPTIONS_Request m_OPTIONS_Request_Base (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, |
+ From p_from, To p_to, Via p_via) modifies m_OPTIONS_Dummy := |
+ { |
+ requestLine := |
+ { |
+ requestUri := p_requestUri |
+ }, |
+ msgHeader := |
+ { |
+ callId := p_callId, |
+ cSeq := {fieldName:=CSEQ_E, seqNumber:= p_cSeq.seqNumber, method:= "OPTIONS"}, |
+ fromField := p_from, |
+ toField := p_to, |
+ via := p_via |
+ } |
+ } |
+ |
+ template PRACK_Request m_PRACK_Request_Base (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, |
+ From p_from, To p_to, Via p_via, RAck p_RAck) |
+ modifies m_PRACK_Dummy := |
+ { |
+ requestLine := |
+ { |
+ requestUri := p_requestUri |
+ }, |
+ msgHeader := |
+ { |
+ callId := p_callId, |
+ cSeq := {fieldName:=CSEQ_E, seqNumber:= p_cSeq.seqNumber, method:= "PRACK"}, |
+ fromField := p_from, |
+ rAck := p_RAck, |
+ toField := p_to, |
+ via := p_via |
+ }, |
+ messageBody := omit |
+ } |
+ |
+ |
+ template PUBLISH_Request m_PUBLISH_Request_Base (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, |
+ From p_from, To p_to, Via p_via, template Event p_event, template RAck p_RAck, template MessageBody p_mb) |
+ modifies m_PUBLISH_Dummy := |
+ { |
+ requestLine := |
+ { |
+ requestUri := p_requestUri |
+ }, |
+ msgHeader := |
+ { |
+ callId := p_callId, |
+ contentLength := {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))}, |
+ contentType := {fieldName := CONTENT_TYPE_E, mediaType := c_plainText/*c_sdpAplication*/}, |
+ cSeq := {fieldName:=CSEQ_E, seqNumber:= p_cSeq.seqNumber, method:= "PUBLISH"}, |
+ event := p_event, |
+ fromField := p_from, |
+ toField := p_to, |
+ via := p_via |
+ }, |
+ messageBody := p_mb |
+ } |
+ |
+ template 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 OPTIONS_Request mw_OPTIONS_Request_Base (template CallId p_callId) modifies mw_OPTIONS_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 (template CallId p_callId) modifies mw_REFER_Dummy := |
+ { |
+ msgHeader := |
+ { |
+ callId := p_callId |
+ } |
+ } |
+ |
+ template REFER_Request |
+ mw_REFER_Request(template CallId p_callId, SipUrl p_requestUri, |
+ SipUrl p_referredBy) |
+ modifies mw_REFER_Request_Base := { |
+ requestLine := {requestUri := p_requestUri}, |
+ msgHeader := { |
+ callId := p_callId, |
+ referredBy := { |
+ fieldName := REFERRED_BY_E, |
+ nameAddr := {displayName := *, addrSpec := p_referredBy}, |
+ referredbyIdParams := * |
+ } |
+ } |
+ } |
+ |
+ template INVITE_Request mw_INVITE_Request(template Require p_require, |
+ SipUrl p_referredBy) modifies mw_INVITE_Request_Base := { |
+ msgHeader := { |
+ require := p_require, |
+ referredBy := { |
+ fieldName := REFERRED_BY_E, |
+ nameAddr := {displayName := *, addrSpec := p_referredBy}, |
+ referredbyIdParams := * |
+ } |
+ } |
+ } |
+ |
+ template REGISTER_Request mw_REGISTER_Request_Base modifies mw_REGISTER_Dummy := |
+ { |
+ requestLine := |
+ { |
+ method := REGISTER_E |
+ } |
+ } |
+ |
+ 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, template 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 := |
+ { scheme := ?, |
+ components := {sip:={userInfo := *, |
+ hostPort:= p_requestUri.components.sip.hostPort}} |
+ } |
+ }, |
+ msgHeader := |
+ { |
+ contentLength := {fieldName := CONTENT_LENGTH_E, len:= lengthof(p_sipfrag)}, |
+ contentType := {fieldName := CONTENT_TYPE_E, mediaType := "message/sipfrag"}, |
+ subscriptionState := { |
+ fieldName := SUBSCRIPTION_STATE_E, |
+ subState := p_state, |
+ substateParams := omit |
+ }, |
+ event := m_Event_refer |
+ }, |
+ messageBody := { |
+ sipfrag := p_sipfrag |
+ } |
+ } |
+ |
+} //* end group request_send |
+ |
+ |
+group request_receive { |
+ |
+ template BYE_Request mw_BYE_Request_Reason(template CallId p_callId, template charstring p_cause) modifies mw_BYE_Request_Base := |
+ { |
+ msgHeader := |
+ { |
+ reason := mw_Reason(p_cause) |
+ } |
+ } |
+ |
+ template BYE_Request mw_BYE_Request_ReasonSIP(template CallId p_callId, template charstring p_cause) modifies mw_BYE_Request_Base := |
+ { |
+ msgHeader := |
+ { |
+ reason := mw_ReasonSIP(p_cause) |
+ } |
+ } |
+ |
+ template 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 INVITE_Request mw_INVITE_MSRP_Session( |
+ in template SDP_media_field p_media_MSRP |
+ ) modifies mw_INVITE_Request_Base := { |
+ messageBody := { |
+ sdpMessageBody := { |
+ protocol_version := ?, |
+ origin := ?, |
+ session_name := ?, |
+ information := *, |
+ uri := *, |
+ emails := *, |
+ phone_numbers := *, |
+ connection := *, |
+ bandwidth := *, |
+ times := ?, |
+ timezone_adjustments := *, |
+ key := *, |
+ attributes := *, |
+ media_list := { |
+ { |
+ media_field := p_media_MSRP, |
+ information := *, |
+ connections := *, |
+ bandwidth := *, |
+ key := *, |
+ attributes := { |
+ { |
+ msrp := { |
+ attr_value := pattern "path:msrp://*" // FIXME Shall parse msrp and msrps for secured msrp |
+ } |
+ } |
+ } |
+ } |
+ } |
+ } |
+ } |
+ } |
+ |
+ 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, |
+ Contact p_contact, |
+ template AlertInfo p_alertInfo |
+ ) modifies m_Response_Base:= { |
+ msgHeader := { |
+ alertInfo := p_alertInfo, |
+ contact := p_contact |
+ } |
+ } |
+ |
+ template Response m_Response_Contact ( |
+ StatusLine p_statusLine, |
+ CallId p_callId, |
+ CSeq p_cSeq, |
+ From p_from, |
+ To p_to, |
+ Via p_via, |
+ Contact p_contact |
+ ) modifies m_Response_Base:= { |
+ msgHeader := { |
+ contact := p_contact |
+ } |
+ } |
+ |
+ template 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, template charstring p_cause) modifies mw_Response_Base:= |
+ { |
+ statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, |
+ msgHeader := |
+ { |
+ reason := mw_Reason(p_cause) |
+ } |
+ } |
+ |
+ template Response mw_Response_RecordRoute (template StatusLine p_statusLine, template CallId p_callId, |
+ template CSeq p_cSeq, template RecordRoute p_recordRoute) modifies mw_Response_Base:= |
+ { |
+ statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?}, |
+ msgHeader := |
+ { |
+ recordRoute := p_recordRoute |
+ } |
+ } |
+ |
+ 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 := 0, |
+ 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 |
+ }; |
+//TODO - delete old |
+// template SDP_media_desc m_mediaFieldBandwdthAttributes(template SDP_media_field p_mf, template SDP_bandwidth p_bw, template SDP_attribute_list p_attributes) := { |
+// media_field := p_mf, |
+// information := omit, |
+// connections := omit, |
+// bandwidth := {p_bw}, |
+// key := omit, |
+// attributes := p_attributes |
+// }; |
+ |
+ template SDP_media_desc m_mediaFieldBandwdthAttributes(template SDP_media_field p_mf, template SDP_bandwidth_list p_bw_l, template SDP_attribute_list p_attributes) := { |
+ media_field := p_mf, |
+ information := omit, |
+ connections := omit, |
+ bandwidth := p_bw_l, |
+ 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_media_field mw_media_MSRP := |
+ { |
+ media := c_msrp, |
+ ports := { port_number := ?, num_of_ports:=omit }, |
+ transport := c_msrpTcp, |
+ 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 SimpleMsgSummary_Templates { |
+ |
+ template SimpleMsgSummary m_SMS(template Msg_summary_line_list p_summaryLineList, template charstring p_uri) := |
+ { |
+ msg_status_line := m_msgStatusLine_yes, |
+ msg_account := m_msgAccount(p_uri), |
+ msg_summary_line_list :=p_summaryLineList, |
+ opt_msg_headers := omit |
+ } |
+ |
+ template SimpleMsgSummary mw_SMS := |
+ { |
+ msg_status_line := ?, |
+ msg_account := *, |
+ msg_summary_line_list := *, |
+ opt_msg_headers := * |
+ } |
+ |
+ template SimpleMsgSummary mw_SMS_yes := |
+ { |
+ msg_status_line := mw_msgStatusLine_yes, |
+ msg_account := *, |
+ msg_summary_line_list := *, |
+ opt_msg_headers := * |
+ } |
+ |
+ template SimpleMsgSummary mw_SMS_yesUri := |
+ { |
+ msg_status_line := mw_msgStatusLine_yes, |
+ msg_account := mw_msgAccount, |
+ msg_summary_line_list := *, |
+ opt_msg_headers := * |
+ } |
+ |
+ template SimpleMsgSummary mw_SMS_yesVoice := |
+ { |
+ msg_status_line := mw_msgStatusLine_yes, |
+ msg_account := *, |
+ msg_summary_line_list := {mw_msgSummaryLine(c_voiceMessage)}, |
+ opt_msg_headers := * |
+ } |
+ |
+ template SimpleMsgSummary mw_SMS_yesUriVoice := |
+ { |
+ msg_status_line := mw_msgStatusLine_yes, |
+ msg_account := mw_msgAccount, |
+ msg_summary_line_list := {mw_msgSummaryLine(c_voiceMessage)}, |
+ opt_msg_headers := * |
+ } |
+ |
+ template Msg_status_line m_msgStatusLine_yes:= |
+ { |
+ msg_type := c_messageWaiting, |
+ msg_status := "yes" |
+ } |
+ |
+ template Msg_status_line mw_msgStatusLine_yes:= |
+ { |
+ msg_type := c_messageWaiting, |
+ msg_status := "yes" |
+ } |
+ |
+ template Msg_account m_msgAccount(template charstring p_uri) := |
+ { |
+ msg_type_account := c_messageAccount, |
+ account_URI := p_uri//m_SipUrl_NumberHostParam(PX_IMS_SUT_UE2_PUBLIC_USER,PX_IMS_SUT_UE2_HOME_DOMAIN,omit) |
+ } |
+ |
+ template Msg_account mw_msgAccount := |
+ { |
+ msg_type_account := c_messageAccount, |
+ account_URI := ? |
+ } |
+ |
+ template Msg_summary_line m_msgSummaryLine(template charstring p_msgContexClass,template charstring p_msgs,template charstring p_urgent_msgs) := |
+ { |
+ msg_context_class := p_msgContexClass, |
+ msgs := p_msgs, |
+ urgent_msgs := p_urgent_msgs |
+ } |
+ |
+ template Msg_summary_line mw_msgSummaryLine(template charstring p_msgContexClass) := |
+ { |
+ msg_context_class := p_msgContexClass, |
+ msgs := ?, |
+ urgent_msgs :=* |
+ } |
+ |
+} //end group Templates_SMS |
+ |
+group MessageBodies { |
+ |
+ template MessageBody m_MBody_SDP(template SDP_Message p_SDP):= |
+ { |
+ sdpMessageBody := p_SDP |
+ }; |
+ |
+ template MessageBody m_MBody_XML(template XmlBody p_xmlBody):= |
+ { |
+ xmlBody := p_xmlBody |
+ }; |
+ |
+ template MessageBody m_mBody_SMS(template SimpleMsgSummary p_SMS):= |
+ { |
+ simpleMsgSummary := p_SMS |
+ }; |
+ |
+ template MessageBody m_MBody_longPlainText:= |
+ { |
+ textplain := c_longMessageContent_1300Bytes |
+ }; |
+ |
+ template MessageBody m_mBody_plainText(charstring p_plaitext):= |
+ { |
+ textplain := p_plaitext |
+ }; |
+ |
+ template MessageBody m_MBody_sipfrag(charstring p_sipfrag) := { |
+ sipfrag := p_sipfrag |
+ } |
+ |
+ template MessageBody m_MBody_MIMESdpXml(template SDP_Message p_sdp, template XmlBody p_xmlBody):= |
+ { |
+ mimeMessageBody := {boundary:="--boundary1", //"PX_SIP_MIME_Boundary", |
+ mimeEncapsulatedList:= { |
+ {content_type:="application/sdp",//"PX_SIP_SDP_ContentType", |
+ content_disposition:=omit, |
+ mime_encapsulated_part:={sdpMessageBody := p_sdp}}, |
+ {content_type:="application/vnd.3gpp.cw+xml",//"PX_SIP_ISUP_ContentType", |
+ content_disposition:=omit, |
+ mime_encapsulated_part:={xmlBody := p_xmlBody}} |
+ } |
+ } |
+ } |
+ |
+ template MessageBody mw_MBody_SDP(template SDP_Message p_SDP):= |
+ { |
+ sdpMessageBody := p_SDP |
+ }; |
+ |
+ template MessageBody mw_MBody_XML(template XmlBody p_xmlBody):= |
+ { |
+ xmlBody := p_xmlBody |
+ }; |
+ |
+ template MessageBody mw_mBody_SMS(template SimpleMsgSummary p_SMS):= |
+ { |
+ simpleMsgSummary := p_SMS |
+ }; |
+ |
+ template MessageBody mw_MBody_MIMESdpXml(template SDP_Message p_sdp, template XmlBody p_xmlBody):= |
+ { |
+ mimeMessageBody := {boundary:=?, |
+ mimeEncapsulatedList:= { |
+ {content_type:=?, |
+ content_disposition:=*, |
+ mime_encapsulated_part:={sdpMessageBody := p_sdp}}, |
+ {content_type:=?, |
+ content_disposition:=*, |
+ mime_encapsulated_part:={xmlBody := p_xmlBody}} |
+ } |
+ } |
+ } |
+ |
+ template MessageBody mw_MBody_MIME_Ims3gpp( |
+ template charstring p_disposition, |
+ template Ims_3gpp p_ims3gpp |
+ ):= { |
+ mimeMessageBody := {boundary:=?, |
+ mimeEncapsulatedList:= { |
+ *, |
+ { |
+ content_type:= c_ims3gppAplication, |
+ content_disposition:= p_disposition, |
+ mime_encapsulated_part :={ |
+ xmlBody := { |
+ ims3gpp := p_ims3gpp |
+ } |
+ } |
+ }, |
+ * |
+ } |
+ } |
+ } |
+ |
+ template MessageBody mw_MBody_MIME_Ims3gppCW( |
+ template charstring p_disposition, |
+ template Ims_3gpp p_ims3gpp |
+ ):= { |
+ mimeMessageBody := {boundary:=?, |
+ mimeEncapsulatedList:= { |
+ *, |
+ { |
+ content_type:= c_ims3gppCwApplication, |
+ content_disposition:= p_disposition, |
+ mime_encapsulated_part :={ |
+ xmlBody := { |
+ ims3gpp := p_ims3gpp |
+ } |
+ } |
+ }, |
+ * |
+ } |
+ } |
+ } |
+ |
+} |
+/* |
+ * |
+ * @desc group TemplatePreparationFunctions contain functions which are used for templates |
+ */ |
+group TemplatePreparationFunctions { |
+ |
+ 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 simpleMsgSummary_Body ONLY in the message body |
+ if (ischosen(p_mb_par.simpleMsgSummary)) |
+ { |
+ v_result := f_simpleMsgSummaryBody_Length(p_mb_par.simpleMsgSummary ); |
+ }; |
+ |
+ // assume MIME_Message in the message body |
+ if (ischosen(p_mb_par.mimeMessageBody)) |
+ { |
+ v_result := f_MIMElength(p_mb_par.mimeMessageBody); |
+ }; |
+ |
+ //assume sipfrag in the message body |
+ if (ischosen(p_mb_par.sipfrag)) |
+ { |
+ v_result := f_TextPlainLength(p_mb_par); //same function due to same type with textplain |
+ }; |
+ |
+ //assume textplain in the message body |
+ if (ischosen(p_mb_par.textplain)) |
+ { |
+ v_result := f_TextPlainLength(p_mb_par); |
+ }; |
+ } |
+ |
+ return v_result |
+ } |
+ |
+ |
+ group SDP_Len_calculation { |
+ /** |
+ * |
+ * @desc Calculation of SDP length |
+ * @param p_mb contain sdp message |
+ * @return sdp_lenght |
+ */ |
+ function f_SDPlength(SDP_Message p_mb) return integer |
+ { |
+ var integer v_result:=2; //* due to empty line beginning of message body |
+ var charstring v_auxstring; |
+ |
+ v_result := 2 + c_CRlen + lengthof(int2str(p_mb.protocol_version)); //* "v=" |
+ v_auxstring := p_mb.origin.user_name & " " & p_mb.origin.session_id & " " & p_mb.origin.session_version & " " & p_mb.origin.net_type & " " & p_mb.origin.addr_type & " " & p_mb.origin.addr; |
+ v_result := v_result + 2 + c_CRlen + lengthof(v_auxstring); //* "o=" |
+ v_result := v_result + 2 + c_CRlen + lengthof(p_mb.session_name); //* "s=" |
+ if (ispresent(p_mb.information)) |
+ {v_auxstring:=p_mb.information; v_result := v_result + 2 + c_CRlen + lengthof(v_auxstring);}; //* "i= " |
+ if (ispresent(p_mb.uri)) |
+ {v_auxstring:=p_mb.uri; v_result := v_result + 2 + c_CRlen + lengthof(v_auxstring);}; //* "u=" |
+ |
+ if (ispresent(p_mb.emails)) { |
+ for (var integer i:=0; i<sizeof(p_mb.emails); i:=i+1) |
+ {v_result := v_result + 2 + c_CRlen + lengthof(p_mb.emails[i].addr_or_phone); //* "e=" |
+ if (ispresent(p_mb.emails[i].disp_name)) |
+ {v_auxstring:=p_mb.emails[i].disp_name; v_result := v_result + 1 + lengthof(v_auxstring);}; |
+ }; |
+ }; |
+ |
+ if (ispresent(p_mb.phone_numbers)) { |
+ for (var integer i:=0; i<sizeof(p_mb.phone_numbers); i:=i+1) |
+ {v_result := v_result + 2 + c_CRlen + lengthof(p_mb.phone_numbers[i].addr_or_phone); //* "p= " |
+ if (ispresent(p_mb.phone_numbers[i].disp_name)) |
+ {v_auxstring:=p_mb.phone_numbers[i].disp_name; v_result := v_result + 1 + lengthof(v_auxstring);}; |
+ }; |
+ }; |
+ |
+ if (ispresent(p_mb.connection)) |
+ { |
+ var integer v_len_con0 := f_SDPlength_connection(p_mb.connection); |
+ v_result := v_result + v_len_con0; |
+ }; //* "c=" |
+ |
+ if (ispresent(p_mb.bandwidth)) |
+ { |
+ for (var integer i:=0; i<sizeof(p_mb.bandwidth); i:=i+1) { //* "b= " |
+ v_auxstring:= p_mb.bandwidth[i].modifier & " "; |
+ v_result := v_result + 2 + c_CRlen + lengthof(v_auxstring) + |
+ lengthof(int2str(p_mb.bandwidth[i].bandwidth)); |
+ }; |
+ }; |
+ |
+ for (var integer i:=0; i<sizeof(p_mb.times); i:=i+1) { |
+ v_auxstring:= p_mb.times[i].time_field.start_time & " " & p_mb.times[i].time_field.stop_time; |
+ v_result := v_result + 2 + c_CRlen + lengthof(v_auxstring);//* "t=" |
+ |
+ if (ispresent(p_mb.times[i].time_repeat)) |
+ { |
+ for (var integer j:=0; j<sizeof(p_mb.times[i].time_repeat); j:=j+1) |
+ { |
+ v_result := v_result + 2 + c_CRlen + lengthof(int2str(p_mb.times[i].time_repeat[j].repeat_interval.time)); //* "r=" |
+ if (ispresent(p_mb.times[i].time_repeat[j].repeat_interval.unit)) |
+ { |
+ v_auxstring:=p_mb.times[i].time_repeat[j].repeat_interval.unit; |
+ v_result := v_result + 1 + lengthof(v_auxstring); |
+ }; |
+ |
+ v_result := v_result + 1 + lengthof(int2str(p_mb.times[i].time_repeat[j].active.time)); |
+ if (ispresent(p_mb.times[i].time_repeat[j].active.unit)) |
+ { |
+ v_auxstring:=p_mb.times[i].time_repeat[j].active.unit; |
+ v_result := v_result + 1 + lengthof(v_auxstring); |
+ }; |
+ |
+ for (var integer k:=0; k<sizeof(p_mb.times[i].time_repeat[j].offsets); k:=k+1) |
+ { |
+ v_result := v_result + 1 + lengthof(int2str(p_mb.times[i].time_repeat[j].offsets[k].time)); |
+ if (ispresent(p_mb.times[i].time_repeat[j].offsets[k].unit)) |
+ { |
+ v_auxstring:=p_mb.times[i].time_repeat[j].offsets[k].unit; |
+ v_result := v_result + 1 + lengthof(v_auxstring); |
+ }; |
+ } |
+ } |
+ }; |
+ }; |
+ |
+ 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].connections); j:=j+1){ |
+ var integer v_len_con2 := f_SDPlength_connection(p_mb.media_list[i].connections[j]); |
+ v_result := v_result + v_len_con2; |
+ }; //* end for |
+ }; |
+ if (ispresent(p_mb.media_list[i].bandwidth)) { //* "b= " |
+ for (var integer j:=0; j<sizeof(p_mb.media_list[i].bandwidth); j:=j+1){ |
+ v_result := v_result + 2 + c_CRlen + lengthof(p_mb.media_list[i].bandwidth[j].modifier) |
+ + 1 + lengthof(int2str(p_mb.media_list[i].bandwidth[j].bandwidth)); |
+ }; //* end for |
+ }; |
+ if (ispresent(p_mb.media_list[i].key)) { //* "k= " |
+ v_result := v_result + 1 + lengthof(p_mb.media_list[i].key.method); |
+ if (ispresent(p_mb.media_list[i].key.key)) { |
+ v_auxstring := p_mb.media_list[i].key.key; |
+ v_result := v_result + 1 + lengthof(v_auxstring); |
+ }; |
+ }; |
+ if (ispresent(p_mb.media_list[i].attributes)) { |
+ for (var integer j:=0; j<sizeof(p_mb.media_list[i].attributes); j:=j+1){ //* "a= " |
+ var integer v_len_attr := f_SDPlength_attribute(p_mb.media_list[i].attributes[j]); |
+ v_result := v_result + v_len_attr; |
+ } //* end for j |
+ }; |
+ }; //* end for i |
+ }; //* end if media_list |
+ |
+ 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) and p_element.conn_addr.ttl>0) |
+ {v_result := v_result + 1 + lengthof(int2str(p_element.conn_addr.ttl));}; |
+ if (ispresent(p_element.conn_addr.num_of_addr) and p_element.conn_addr.num_of_addr>0) |
+ {v_result := v_result + 1 + lengthof(int2str(p_element.conn_addr.num_of_addr));}; |
+ return v_result |
+ } //* f_SDPlength_connection |
+ |
+ 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)) |
+ { |
+ v_result := f_XMLBody_ConferenceInfo_Length(p_mb.conference); |
+ }; |
+ |
+ // assume CUG ONLY in the XML message body |
+ if (ischosen(p_mb.cug)) |
+ { |
+ v_result := f_XMLBody_Cug_Length(p_mb.cug); |
+ }; |
+ |
+ // assume MCID ONLY in the XML message body |
+ if (ischosen(p_mb.mcid)) |
+ { |
+ v_result := f_XMLBody_Mcid_Length(p_mb.mcid); |
+ }; |
+ |
+ // assume CW ONLY in the XML message body |
+ if (ischosen(p_mb.cw)) |
+ { |
+ v_result := f_XMLBody_Cw_Length(p_mb.cw); |
+ }; |
+ |
+ // assume CDIV ONLY in the XML message body |
+ if (ischosen(p_mb.cdivn)) |
+ { |
+ v_result := f_XMLBody_Cdivn_Length(p_mb.cdivn); |
+ }; |
+ |
+ // assume PSTNTransit ONLY in the XML message body |
+ if (ischosen(p_mb.pstnTransit)) |
+ { |
+ v_result := f_XMLBody_PSTNTransit_Length(p_mb.pstnTransit); |
+ }; |
+ |
+ // assume Simservs ONLY in the XML message body |
+ if (ischosen(p_mb.simservs)) |
+ { |
+ v_result := f_XMLBody_Simservs_Length(p_mb.simservs); |
+ }; |
+ |
+ // assume ResourceLists ONLY in the XML message body |
+ if (ischosen(p_mb.resourceLists)) |
+ { |
+ v_result := f_XMLBody_ResourceList_Length(p_mb.resourceLists); |
+ }; |
+ |
+ // assume Ims3GPP ONLY in the XML message body |
+ if (ischosen(p_mb.ims3gpp)) |
+ { |
+ v_result := f_XMLBody_Ims3GPP_Length(p_mb.ims3gpp); |
+ }; |
+ |
+ /** Add aditional checks regarding to new variants, |
+ * also implement appropriate function for calculation |
+ */ |
+ } |
+ return v_result |
+ } //* f_XMLBodyLength |
+ |
+ group XMLBodies_calculation{ |
+ |
+ /** |
+ * |
+ * @desc Calculation of XML ConferenceInfo element length |
+ * @param p_mb contain XML ConfInfo body |
+ * @return xml_length |
+ */ |
+ function f_XMLBody_ConferenceInfo_Length(Conference_type p_mb) return integer |
+ { |
+ var integer v_result:= lengthof(encvalue(p_mb))/8; |
+ return v_result |
+ } //* f_XMLBody_ConferenceInfo_Length |
+ |
+ /** |
+ * |
+ * @desc Calculation of XML CUG element length |
+ * @param p_mb contain XML CUG body |
+ * @return xml_length |
+ */ |
+ function f_XMLBody_Cug_Length(Cug p_mb) return integer |
+ { |
+ var integer v_result:= lengthof(encvalue(p_mb))/8; |
+ return v_result |
+ } //* f_XMLBody_Cug_Length |
+ |
+ /** |
+ * |
+ * @desc Calculation of XML MCID element length |
+ * @param p_mb contain XML MCID body |
+ * @return xml_length |
+ */ |
+ function f_XMLBody_Mcid_Length(Mcid p_mb) return integer |
+ { |
+ var integer v_result:= lengthof(encvalue(p_mb))/8; |
+ |
+ return v_result |
+ } //* f_XMLBody_Mcid_Length |
+ |
+ /** |
+ * |
+ * @desc Calculation of XML CW element length |
+ * @param p_mb contain XML CW body |
+ * @return xml_length |
+ */ |
+ function f_XMLBody_Cw_Length(Ims_cw p_mb) return integer |
+ { |
+ var integer v_result:= lengthof(encvalue(p_mb))/8; |
+ |
+ return v_result |
+ } //* f_XMLBody_Cw_Length |
+ |
+ /** |
+ * |
+ * @desc Calculation of XML CDIVN element length |
+ * @param p_mb contain XML CDIVN body |
+ * @return xml_length |
+ */ |
+ function f_XMLBody_Cdivn_Length(Comm_div_info_type p_mb) return integer |
+ { |
+ var integer v_result:= lengthof(encvalue(p_mb))/8; |
+ |
+ return v_result |
+ } //* f_XMLBody_Cdivn_Length |
+ |
+ /** |
+ * |
+ * @desc Calculation of XML PSTNTransit element length |
+ * @param p_mb contain XML PSTNTransit body |
+ * @return xml_length |
+ */ |
+ function f_XMLBody_PSTNTransit_Length(PSTN_transit p_mb) return integer |
+ { |
+ var integer v_result:= lengthof(encvalue(p_mb))/8; |
+ return v_result |
+ } //* f_XMLBody_PSTNTransit_Length |
+ |
+ /** @desc Calculation of XML Simservs element length |
+ * @param p_mb contain XML Simservs body |
+ * @return xml_length |
+ */ |
+ function f_XMLBody_Simservs_Length(Simservs p_mb) return integer |
+ { |
+ var integer v_result:= lengthof(encvalue(p_mb))/8; |
+ return v_result |
+ } //* f_XMLBody_Simservs_Length |
+ |
+ /** @desc Calculation of XML ResourceList length |
+ * @param p_mb contain XML ResourceList body |
+ * @return xml_length |
+ */ |
+ function f_XMLBody_ResourceList_Length(Resource_lists p_mb) return integer |
+ { |
+ var integer v_result:= lengthof(encvalue(p_mb))/8; |
+ return v_result |
+ } //* f_XMLBody_ResourceList_Length |
+ |
+ /** @desc Calculation of XML Ims3GPP length |
+ * @param p_mb contain XML Ims3GPP body |
+ * @return xml_length |
+ */ |
+ function f_XMLBody_Ims3GPP_Length(TIMS3GPP p_mb) return integer |
+ { |
+ var integer v_result:= lengthof(encvalue(p_mb))/8; |
+ return v_result |
+ } //* f_XMLBody_Ims3GPP_Length |
+ |
+ } //* XMLBodies_calculation |
+ |
+ }//* group XMLlen_calculation |
+ |
+ group simpleMsgSummaryBody_Length{ |
+ |
+ function f_simpleMsgSummaryBody_Length(SimpleMsgSummary p_mb) return integer |
+ { |
+ var integer v_result:=2; //* due to empty line beginning of message body |
+ var charstring v_auxstring; |
+ |
+ v_result := 2+lengthof(p_mb.msg_status_line.msg_type) + 2 + lengthof(p_mb.msg_status_line.msg_status)+c_CRlen; //* "Message-Waiting: yes" |
+ |
+ if (ispresent(p_mb.msg_account)) //* "Message-Account" |
+ {v_result := v_result + 2 + lengthof(p_mb.msg_account.msg_type_account)+2+lengthof(p_mb.msg_account.account_URI)+c_CRlen;}; |
+ if (ispresent(p_mb.msg_summary_line_list)) { |
+ for (var integer i:=0; i<sizeof(p_mb.msg_summary_line_list); i:=i+1) |
+ {v_result := v_result + 2 + c_CRlen + lengthof(p_mb.msg_summary_line_list[i].msg_context_class)+2+lengthof(p_mb.msg_summary_line_list[i].msgs); |
+ if (ispresent(p_mb.msg_summary_line_list[i].urgent_msgs)) |
+ {v_auxstring:=p_mb.msg_summary_line_list[i].urgent_msgs; v_result := v_result + 1 + lengthof(v_auxstring);}; |
+ }; |
+ }; |
+ if (ispresent(p_mb.opt_msg_headers)) { |
+ for (var integer i:=0; i<sizeof(p_mb.opt_msg_headers); i:=i+1) |
+ {v_result := v_result + 2 + c_CRlen + lengthof(p_mb.opt_msg_headers[i]); |
+ }; |
+ }; |
+ return v_result |
+ } |
+ } |
+ |
+ 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 |
/v2.0.0/ttcn/LibSip_Templates.ttcn |
---|
Property changes: |
Added: svn:keywords |
## -0,0 +1 ## |
+Id |
\ No newline at end of property |
Index: v2.0.0/ttcn/LibSip_Interface.ttcn |
=================================================================== |
--- v2.0.0/ttcn/LibSip_Interface.ttcn (nonexistent) |
+++ v2.0.0/ttcn/LibSip_Interface.ttcn (revision 552) |
@@ -0,0 +1,187 @@ |
+/* |
+ * @author STF 346, STF366, STF368, STF369, STF450 |
+ * @version $Id$ |
+ * @desc This module provides the types used by the test component |
+ * for SIP-IMS tests. Module become from STF306 and STF334-336 |
+ * This module is part of LibSipV2. |
+ */ |
+ |
+module LibSip_Interface |
+{ |
+ //LibCommon |
+ import from LibCommon_Sync all; |
+ import from LibCommon_AbstractData all; |
+ import from LibCommon_BasicTypesAndValues all; |
+ import from LibCommon_DataStrings all; |
+ //LibSip |
+ import from LibSip_SIPTypesAndValues all; |
+ import from LibSip_SDPTypes all; |
+ import from LibSip_XMLTypes all; |
+ |
+ import from LibSip_PIXITS all; |
+ |
+ 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 template RecordRoute vc_recordRoute; // value of RecordRoute header |
+ var boolean vc_boo_recordRoute := false; // boolean indicates valid recordRoute |
+ var template Route vc_route; // value of Route header |
+ var template Route vc_route_REG; // value of Route header from registration ServiceRoute header for initial Requests |
+ var boolean vc_boo_route := false; // boolean indicates valid Route |
+ |
+ 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 template XmlBody vc_xml_local; //SDP values to be sent |
+ |
+ var CSeq vc_iut_CSeq := c_empty_cSeq; // value of last CSeq header used by the IUT in request |
+ // To/From header-fields to be used if the callee will release the session |
+ var To vc_callee_To := c_empty_To; |
+ var From vc_callee_From := c_empty_From; |
+ // To/From header-fields to be used if the caller will release the session |
+ var To vc_caller_To := c_empty_To; |
+ var From vc_caller_From := c_empty_From; |
+ var Authorization vc_authorization; |
+ |
+ // variables for storing default references |
+ var default vc_default; |
+ var default vc_def_catchSyncStop; |
+ |
+ // general timers |
+ timer tc_T1 := PX_SIP_T1; |
+ timer tc_Tf := PX_SIP_TF; |
+ timer tc_wait := PX_SIP_TWAIT; |
+ timer tc_ack := PX_SIP_TACK; |
+ timer tc_resp := PX_SIP_TRESP; |
+ timer tc_noAct := PX_SIP_TNOACT; // time for SUT to get idle state |
+// timer TRept; |
+// timer TSync := PX_SIP_TSYNC; |
+ timer tc_guard := PX_SIP_TGUARD;//MRO |
+ timer tc_tDelay := 32.0; |
+ |
+ var float vc_tcRESP := PX_SIP_TRESP; // standard value for TRESP (may be modified in particular tests) |
+ |
+ // indicators set/used parameter status or state handling in default |
+ var boolean vc_sdp_remote_is_valid := false; // true if there is a value in v_SDP_remote |
+ var boolean vc_history_is_valid := false; // true if there is a HistoryList in response message |
+ var boolean vc_send_SDP := false; // send SDP in the next outgoing message |
+ var boolean vc_ignore_bye := false; // enable ignore of repeated bye in default |
+ var boolean vc_ignore_invite := false; // enable ignore invite in default |
+ var boolean vc_ignore_subscribe := false; // enable ignore subscribe in default |
+ var boolean vc_ignore181 := false; // enable ignore of 181 in default |
+ var boolean vc_ignore484 := false; // enable ignore of 484 in default |
+ var boolean vc_ignore4xx := false; // enable ignore of 4xx in default |
+ var boolean vc_ignore200OKinv := false; // enable ignore of 200OKinv in default |
+ var boolean vc_ignore_notify := false; // enable ignore of notify in default |
+ var boolean vc_supported_100rel := false; // true if the received invite contains 100rel |
+ var boolean vc_supported_precondition:= false; // true if the received invite contains precondition |
+ var boolean vc_MESSAGEreceived := false; // true if MESSAGE received during altstep |
+ var boolean vc_first_recv := false; // true after receipt of first incomming SIP message |
+ var boolean vc_firstREGISTER_sent := false; // true after sent of first REGISTER message |
+ var boolean vc_DeregDone := false; // true after first DeREGISTRATION trail (avoid loop) |
+ var boolean vc_interface_isc := false; // true if isc interface is in use |
+ var boolean v_white_space := false;//MRO |
+ |
+ // 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 |
/v2.0.0/ttcn/LibSip_Interface.ttcn |
---|
Property changes: |
Added: svn:keywords |
## -0,0 +1 ## |
+Id |
\ No newline at end of property |
Index: v2.0.0/ttcn/LibSip_PIXITS.ttcn |
=================================================================== |
--- v2.0.0/ttcn/LibSip_PIXITS.ttcn (nonexistent) |
+++ v2.0.0/ttcn/LibSip_PIXITS.ttcn (revision 552) |
@@ -0,0 +1,350 @@ |
+/* |
+ * @author STF 346, STF366, STF368, STF369, STF450 |
+ * @version $Id$ |
+ * @desc This module provides the types used by the test component |
+ * for SIP-IMS tests. Module become from STF306 and STF334-336 |
+ * This module is part of LibSipV2. |
+ * NOTE: PIXITS in folowing groups can be ignored if this information |
+ * is provided in other modules of the ATS that uses this SIP library |
+ * - Ports_and_addresses_of_the_SUT |
+ * - PortsAndAddressesOfTheTS1 |
+ * - PortsAndAddressesOfTheTS2 |
+ * - PortsAndAddressesOfTheTS3 |
+ * - ParametersForHTTP_Authentication |
+ */ |
+ |
+module LibSip_PIXITS //MRO |
+{ |
+ //LibCommon |
+ import from LibCommon_BasicTypesAndValues all; |
+ import from LibCommon_DataStrings all; |
+ |
+// _____________________________ PIXIT-S_______________________________ |
+ group SIP_PIXITparameters{ |
+ group SDPParameter { |
+ |
+ /** @desc charstring for SDP dynamic port |
+ */ |
+ modulepar charstring PX_SIP_SDP_dyn := "0"; |
+ |
+ /** @desc charstring for SDP bandwidth modifier |
+ */ |
+ modulepar charstring PX_SIP_SDP_b_modifier := "AS"; |
+ |
+ /** @desc integer for SDP bandwidth value |
+ */ |
+ modulepar integer PX_SIP_SDP_b_bandwidth := 64; |
+ |
+ /** @desc charstring for SDP media attribute encoding supported by the IUT |
+ */ |
+ modulepar charstring PX_SIP_SDP_encoding := "PCMU/8000"; |
+ |
+ /** @desc charstring for SDP media attribute encoding unavailable by the IUT |
+ */ |
+ modulepar charstring PX_SIP_SDP_encoding_unavail := "GSM/8000"; // f_Sip_TC2105_IS___xx__U18 |
+ |
+ /** @desc charstring for SDP media attribute encoding unsupported by the IUT |
+ */ |
+ modulepar charstring PX_SIP_SDP_encoding_unsup := "GSM/8000"; // f_Sip_TC2105_IS___xx__U18 |
+ |
+ /** @desc charstring for SDP media T.38 transport (used in TC2101_IS___AU__09) |
+ */ |
+ modulepar charstring PX_SIP_SDP_transport := "udptl"; |
+ } //group SDP Parameter |
+ |
+ group ISUPinterworkingParameters{ |
+ /** @desc charstring for Used CPC language |
+ */ |
+ modulepar charstring PX_SIP_ISUP_LANGUAGE := "English"; |
+ /** @desc charstring for Used CPC language |
+ */ |
+ modulepar charstring PX_SIP_ISUP_CPC_VALUE := "prison"; |
+ } // goup PSTNParameters |
+ |
+ group SupportedOptions{ |
+ |
+ /** @desc boolean for True if 100rel mechanism is supported in SIP |
+ */ |
+ modulepar boolean PX_SIP_100rel := false; |
+ |
+ /** @desc boolean for True if precondition mechanism is supported in SIP |
+ */ |
+ modulepar boolean PX_SIP_precondition := false; |
+ |
+ /** @desc boolean for True if UDP Transport is used by the IUT to run campaign |
+ */ |
+ modulepar boolean PX_SIP_UDP := true; |
+ |
+ /** @desc charstring for Used Transport in upper case "UDP"/"TCP" |
+ */ |
+ modulepar charstring PX_SIP_TRANSPORT := "UDP"; |
+ }// group SupportedOptions{ |
+ |
+ // PIXITS in group Ports_and_addresses_of_the_SUT can be ignored if this information is provided in other modules of the ATS that uses this SIP library |
+ group Ports_and_addresses_of_the_SUT{ |
+ |
+ /** @desc integer for SUT port number to exchange SIP messages |
+ */ |
+ modulepar integer PX_SIP_SUT_PORT := 5060; |
+ |
+ /** @desc charstring for SUT IP address to exchange SIP messages |
+ */ |
+ modulepar charstring PX_SIP_SUT_IPADDR := "172.27.16.115"; |
+ |
+ /** @desc charstring for SUT domain |
+ */ |
+ modulepar charstring PX_SIP_SUT_HOME_DOMAIN := "172.27.16.115"; |
+ |
+ /** @desc charstring for unknown SUT domain |
+ */ |
+ modulepar charstring PX_SIP_SUT_HOME_DOMAIN_UNKNOWN := "172.88.88.88"; |
+ |
+ } |
+ |
+ // PIXITS in group PortsAndAddressesOfTheTS1 can be ignored if this information is provided in other modules of the ATS that uses this SIP library |
+ group PortsAndAddressesOfTheTS1 { |
+// Ports and addresses of the TS1 (tester), first access |
+ /** @desc integer for port number used by the TS1 to exchange SIP messages |
+ */ |
+ modulepar integer PX_SIP_TS1_PORT := 5060; |
+ |
+ /** @desc charstring for IP address used by the TS1 to exchange SIP messages |
+ */ |
+ modulepar charstring PX_SIP_TS1_IPADDR := "172.27.1.218"; |
+ |
+ /** @desc charstring for identity of the tester local domain |
+ */ |
+ modulepar charstring PX_SIP_TS1_LOCAL_DOMAIN := "172.27.1.218"; |
+ |
+ /** @desc charstring for identity of the tester local user |
+ */ |
+ modulepar charstring PX_SIP_TS1_LOCAL_USER := "2910"; |
+ |
+ /** @desc charstring for identity of the user with active call diversion service |
+ */ |
+ modulepar charstring PX_SIP_TS1_LOCAL_USER_DIV := "2907"; |
+ |
+ /** @desc charstring for identity of the tester local user (format "+"cc+ndc+sn) |
+ */ |
+ modulepar charstring PX_SIP_TS1_LOCAL_USER_FULL := "+ 33492941111"; |
+ |
+ /** @desc integer for port number used by the TS to exchange media streams |
+ */ |
+ modulepar integer PX_SIP_TS1_BEARER_PORT := 52000; |
+ |
+ /** @desc charstring for port number used by the TS to exchange media streams |
+ */ |
+ modulepar integer PX_SIP_TS1_BEARER_PORT2 := 62000; |
+ |
+ /** @desc charstring for IP address used by the TS to exchange media streams |
+ */ |
+ modulepar charstring PX_SIP_TS1_BEARER_IPADDR := "172.27.1.218"; |
+ }// group PortsAndAddressesOfTheTS |
+ |
+ // PIXITS in group PortsAndAddressesOfTheTS2 can be ignored if this information is provided in other modules of the ATS that uses this SIP library |
+ group PortsAndAddressesOfTheTS2 { |
+// Ports and addresses of the TS2 (tester), second access |
+ |
+ /** @desc integer for port number used by the TS2 to exchange SIP messages |
+ */ |
+ modulepar integer PX_SIP_TS2_PORT := 5060; |
+ |
+ /** @desc charstring for IP address used by the TS2 to exchange SIP messages |
+ */ |
+ modulepar charstring PX_SIP_TS2_IPADDR := "172.27.1.219"; |
+ |
+ /** @desc charstring for identity of the tester local domain |
+ */ |
+ modulepar charstring PX_SIP_TS2_LOCAL_DOMAIN := "172.27.1.219"; |
+ |
+ /** @desc charstring for identity of the tester local user |
+ */ |
+ modulepar charstring PX_SIP_TS2_LOCAL_USER := "2911"; |
+ |
+ /** @desc charstring for identity of the user with active call diversion service |
+ */ |
+ modulepar charstring PX_SIP_TS2_LOCAL_USER_DIV := "2011"; |
+ |
+ /** @desc charstring for identity of the tester local user (format "+"cc+ndc+sn) |
+ */ |
+ modulepar charstring PX_SIP_TS2_LOCAL_USER_FULL := "+ 33 4 92941111"; |
+ |
+ /** @desc integer for port number used by the TS to exchange media streams |
+ */ |
+ modulepar integer PX_SIP_TS2_BEARER_PORT := 53000; |
+ |
+ /** @desc integer for port number used by the TS to exchange media streams |
+ */ |
+ modulepar integer PX_SIP_TS2_BEARER_PORT2 := 63000; |
+ |
+ /** @desc charstring for IP address used by the TS to exchange media streams |
+ */ |
+ modulepar charstring PX_SIP_TS2_BEARER_IPADDR := "172.27.1.218"; |
+ |
+ }//group PortsAndAddressesOfTheTS2 |
+ |
+ // PIXITS in group PortsAndAddressesOfTheTS3 can be ignored if this information is provided in other modules of the ATS that uses this SIP library |
+ group PortsAndAddressesOfTheTS3 { |
+// Ports and addresses of the TS3 (tester), second access |
+ /** @desc integer for Port number used by the TS3 to exchange SIP messages |
+ */ |
+ modulepar integer PX_SIP_TS3_PORT := 5060; |
+ |
+ /** @desc charstring for IP address used by the TS3 to exchange SIP messages |
+ */ |
+ modulepar charstring PX_SIP_TS3_IPADDR := "172.27.1.220"; |
+ |
+ /** @desc charstring for identity of the tester local domain |
+ */ |
+ modulepar charstring PX_SIP_TS3_LOCAL_DOMAIN := "172.27.1.220"; |
+ |
+ /** @desc charstring for identity of the tester local user |
+ */ |
+ modulepar charstring PX_SIP_TS3_LOCAL_USER := "2012"; |
+ |
+ } //group PortsAndAddressesOfTheTS3 |
+ |
+ group RegistrationParameters { |
+ |
+ /** @desc boolean for the SIP user if it have to register itself before executing a test case |
+ */ |
+ modulepar boolean PX_SIP_REGISTRATION := false; |
+ |
+ /** @desc integer for the minimun SIP user registration expires-value |
+ */ |
+ modulepar integer PX_SIP_REGISTRATION_exp_min := 3600; |
+ |
+ /** @desc charstring for REGISTRAR domain |
+ */ |
+ modulepar charstring PX_SIP_SUT_REGISTRAR_DOMAIN := "172.27.16.115"; |
+ }// group Registration parameters |
+ |
+ group ReleaseCause{ |
+ /** @desc integer for Release cause to be used in BYE and in Failure messages |
+ */ |
+ modulepar integer PX_SIP_BYE_CAUSE := 16; |
+ }//group ReleaseCause |
+ |
+ group RTPStreamControlAndCheck{ |
+ /** @desc boolean for True, if conversation check is implemented. |
+ */ |
+ modulepar boolean PX_SIP_CheckConversation := false; |
+ |
+ /** @desc boolean for True, if DTMF check is implemented. |
+ */ |
+ modulepar boolean PX_SIP_CheckDTMF := false; |
+ |
+ /** @desc boolean for True, if Announcement sending is implemented. |
+ */ |
+ modulepar boolean PX_SIP_SendAnnouncement := false; |
+ |
+ /** @desc boolean for True, if ringing check is implemented. |
+ */ |
+ modulepar boolean PX_SIP_CheckRinging := false; |
+ }//group RTPStreamControlAndCheck |
+ |
+ group SwitchToEnableAuthentication { |
+ /** @desc boolean for option controlling if authentication is enabled/disabled for REGISTER messages |
+ */ |
+ modulepar boolean PX_SIP_REGISTER_AUTHENTICATION_ENABLED := true; |
+ |
+ /** @desc boolean for option controlling if authentication is enabled/disabled for INVITE messages |
+ */ |
+ modulepar boolean PX_SIP_INVITE_AUTHENTICATION_ENABLED := false; |
+ }//group SwitchToEnableAuthentication |
+ |
+ group NofifyAndSubscribe { |
+ modulepar{ |
+ /** @desc boolean for option controlling if notification is enabled/disabled |
+ */ |
+ boolean PX_SIP_NOTIFICATION := true; |
+ /** @desc boolean for option controlling if subscription is enabled/disabled |
+ */ |
+ boolean PX_SIP_SUBSCRIPTION := true; |
+ } |
+ } |
+ |
+ // PIXITS in group ParametersForHTTP_Authentication can be ignored if this information is provided in other modules of the ATS that uses this SIP library |
+ group ParametersForHTTP_Authentication { |
+ |
+ /** @desc charstring for RFC 2617 clause 3-2-1 qop options: |
+ * Quoted string of one or more tokens indicating the "quality of protection" values supported by the server. The |
+ * value "auth" indicates authentication; the value "auth-int" indicates authentication with integrity protection. |
+ */ |
+ modulepar charstring PX_SIP_SUT_UE1_QOP := "auth"; |
+ |
+ /** @desc charstring for RFC 2617 clause 3-2-2 username: |
+ * The name of user in the specified realm |
+ */ |
+ modulepar charstring PX_SIP_SUT_UE1_USERNAME := "abcd"; |
+ |
+ /** @desc charstring for RFC 2617 clause 3-2-2-2 passwd: A known shared secret, the password of user of the specified username |
+ */ |
+ modulepar charstring PX_SIP_SUT_UE1_PASSWD := "1234"; |
+ |
+ /** @desc charstring for RFC 2617 3-2-1 qop options: |
+ * Quoted string of one or more tokens indicating the "quality of protection" values supported by the server. The |
+ * value "auth" indicates authentication; the value "auth-int" indicates authentication with integrity protection. |
+ */ |
+ modulepar charstring PX_SIP_SUT_UE2_QOP := "auth"; |
+ |
+ /** @desc charstring for RFC 2617 clause 3-2-2 username: |
+ * The name of user in the specified realm |
+ */ |
+ modulepar charstring PX_SIP_SUT_UE2_USERNAME := "abcd"; |
+ |
+ /** @desc charstring for RFC 2617 clause 3-2-2-2 passwd: A known shared secret, the password of user of the specified username |
+ */ |
+ modulepar charstring PX_SIP_SUT_UE2_PASSWD := "1234"; |
+ |
+ }//group ParametersForHTTP_Authentication |
+ |
+ group SIP_Timers { |
+ /** @desc float for T1 RTT estimate (500 ms) |
+ */ |
+ modulepar float PX_SIP_T1 := 0.5; |
+ |
+ /** @desc float for T2 Maximum retransmit interval for non-INVITE requests and INVITE response (4000 ms) |
+ */ |
+ modulepar float PX_T2 := 4.0; |
+ |
+ /** @desc float for T4 Maximum duration a message will remain in the network |
+ */ |
+ modulepar float PX_T4 := 1.0; |
+ |
+ /** @desc float for TDELAY default value for timeout on outgoing SIP request (ie 64*T1) |
+ */ |
+ modulepar float PX_SIP_TF := 32.0; |
+ |
+ /** @desc float for TWait default value for waiting an operator action |
+ */ |
+ modulepar float PX_SIP_TWAIT := 30.0; |
+ |
+ /** @desc float for TAck default value for waiting an acknowledgement |
+ */ |
+ modulepar float PX_SIP_TACK := 8.0; |
+ |
+ /** @desc float for TResp default value for waiting for a response from the IUT |
+ */ |
+ modulepar float PX_SIP_TRESP := 15.0; |
+ |
+ /** @desc float for TNoAct default value for waiting no message from the IUT |
+ * Value given for PX_TNOACT should be less than value of |
+ * SHORT_REGISTRATION constant (which is currently "3" (seconds)) |
+ */ |
+ modulepar float PX_SIP_TNOACT := 1.0; |
+ |
+ /** @desc float for TSYNC default value to synchronise ptc |
+ */ |
+ modulepar float PX_SIP_TSYNC := 10.0; |
+ |
+ /** @desc float for TGUARD default value for an extra long timer to limit test execution |
+ */ |
+ modulepar float PX_SIP_TGUARD := 120.0; |
+ |
+ /** @desc float for TRespRetention minimum time that a Proxy will wait before sending a final response |
+ */ |
+ modulepar float PX_TRespRetention := 1.0; |
+ }//group SIP_Timers |
+ } //group SIP_PIXITparameters |
+} // end module LibSip_PIXITS |
/v2.0.0/ttcn/LibSip_PIXITS.ttcn |
---|
Property changes: |
Added: svn:keywords |
## -0,0 +1 ## |
+Id |
\ No newline at end of property |
Index: v2.0.0/ttcn/LibSip_SIPTypesAndValues.ttcn |
=================================================================== |
--- v2.0.0/ttcn/LibSip_SIPTypesAndValues.ttcn (nonexistent) |
+++ v2.0.0/ttcn/LibSip_SIPTypesAndValues.ttcn (revision 552) |
@@ -0,0 +1,1924 @@ |
+/** |
+ * @author STF 346, STF366, STF368, STF369, STF450 |
+ * @version $Id$ |
+ * @desc This module defines message, header, structured and simple SIP |
+ * types as well constants used by LipSip constructs. <br> |
+ * Note that any changes made to the definitions in this module |
+ * may be overwritten by future releases of this library |
+ * End users are encouraged to contact the distributers of this |
+ * module regarding their modifications or additions |
+ * This module is part of LibSipV2. |
+ * @remark Adding of new message and header types is ok; |
+ * Adding of new optional header fields in @see MessageHeader type |
+ * is ok but should be done at same time as dummy template updates; |
+ * Existing message or header types shall not be changed or removed - |
+ * change requests shall be made to http://t-ort.etsi.org |
+ */ |
+ |
+module LibSip_SIPTypesAndValues |
+{ |
+ import from LibSip_MessageBodyTypes 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"; |
+ |
+ // URN schema |
+ const charstring c_urnScheme := "urn"; |
+ |
+ // TAG_ID |
+ const charstring c_tagId := "tag"; |
+ |
+ // BRANCH_ID |
+ const charstring c_branchId := "branch"; |
+ |
+ // BRANCH_COOKIE |
+ const charstring c_branchCookie := "z9hG4bK"; |
+ |
+ // EXPIRES_ID |
+ const charstring c_expiresId := "expires"; |
+ |
+ // MADDR_ID |
+ const charstring c_maddrId := "maddr"; |
+ |
+ // METHOD_ID |
+ const charstring c_methodId := "method"; |
+ |
+ // RECEIVED_ID |
+ const charstring c_receivedId := "received"; |
+ |
+ // TTL_ID |
+ const charstring c_ttlId := "ttl"; |
+ |
+ // USER_ID |
+ const charstring c_userId := "user"; |
+ |
+ // SDP name application |
+ const charstring c_sdpAplication := "application/sdp"; |
+ |
+ // XML name application |
+ const charstring c_xmlAplication := "application/xml"; |
+ |
+ // XML name application |
+ const charstring c_xmlreginfoAplication := "application/reginfo+xml"; |
+ |
+ // 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"& |
+ oct2char('0D'O) & oct2char('0A'O); // 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"; |
+ const PrivacyValue c_privacy_session := "session"; |
+ |
+ // @ (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"; |
+ const charstring c_access_network_charging_info := "access-network-charging-info"; |
+ |
+} //end group PChargingVectorConstants |
+ |
+group HeaderFieldConstants { |
+ |
+ const CallId c_empty_CallId := |
+ { |
+ fieldName := CALL_ID_E, |
+ callid := "" |
+ }; |
+ |
+ const ContentType c_empty_ContentType := |
+ { |
+ fieldName := CONTENT_TYPE_E, |
+ mediaType := "" |
+ }; |
+ |
+ const CSeq c_empty_cSeq := { |
+ fieldName := CSEQ_E, |
+ seqNumber:=0, |
+ method:="EMPTY" }; |
+ |
+ const From c_empty_From := { |
+ fieldName := FROM_E, |
+ addressField := { |
+ nameAddr := { |
+ displayName := omit, |
+ addrSpec := { |
+ scheme := c_sipScheme, |
+ components := { |
+ sip := { |
+ userInfo := omit , |
+ hostPort := {host:="127.0.0.1", portField:=c_defaultSipPort} |
+ } |
+ }, |
+ urlParameters := omit, |
+ headers := omit |
+ } |
+ } |
+ }, |
+ fromParams := omit |
+ }; |
+ |
+ const MaxForwards c_maxForwards70 := {fieldName:=MAX_FORWARDS_E, forwards:=70} |
+ |
+ const SipUrl c_empty_RequestUri := |
+ { |
+ scheme := c_sipScheme, |
+ components := { |
+ sip := { |
+ userInfo := omit , |
+ hostPort := {host:="127.0.0.1", portField:=c_defaultSipPort} |
+ } |
+ }, |
+ urlParameters := omit, |
+ headers := omit |
+ }; |
+ |
+ const SipUrl c_unavailableUri := |
+ { |
+ scheme := c_sipScheme, |
+ components := { |
+ sip := { |
+ userInfo := {userOrTelephoneSubscriber:="unavailable", password:=omit}, |
+ hostPort := {host:="anonymous.invalid", portField:=c_defaultSipPort} |
+ } |
+ }, |
+ urlParameters := omit, |
+ headers := omit |
+ }; |
+ |
+ const To c_empty_To := |
+ { // value of To header |
+ fieldName := TO_E, |
+ addressField := { |
+ nameAddr := { |
+ displayName := omit, |
+ addrSpec := { |
+ scheme := c_sipScheme, |
+ components := { |
+ sip := { |
+ userInfo := omit , |
+ hostPort := {host:="127.0.0.1", portField:=c_defaultSipPort} |
+ } |
+ }, |
+ urlParameters := omit, |
+ headers := omit |
+ } |
+ } |
+ }, |
+ toParams := omit |
+ }; |
+ |
+ const Via c_empty_Via := { |
+ fieldName := VIA_E, |
+ viaBody :={ |
+ {sentProtocol := { |
+ protocolName := c_sipName, |
+ protocolVersion := c_sipVersion, |
+ transport := c_defaultSipProt |
+ }, |
+ sentBy := {host:="127.0.0.1", portField:=c_defaultSipPort}, |
+ viaParams:= omit |
+ } |
+ }}; |
+ |
+ |
+} |
+ |
+ |
+group UserProfileConstants |
+{ |
+ // number of user profile from 1-10 for SIP profile |
+ const integer c_userProfile_SIP1_home := 1; |
+ const integer c_userProfile_SIP2_home := 2; |
+ |
+} //end group UserProfileConstants |
+ |
+group StatusLines |
+ { |
+ const StatusLine c_statusLine100 := {c_sipNameVersion, 100, "Trying"}; |
+ const StatusLine c_statusLine180 := {c_sipNameVersion, 180, "Ringing"}; |
+ const StatusLine c_statusLine181 := {c_sipNameVersion, 181, "Call Is Being Forwarded"}; |
+ const StatusLine c_statusLine182 := {c_sipNameVersion, 182, "Queued"}; |
+ const StatusLine c_statusLine183 := {c_sipNameVersion, 183, "Session Progress"}; |
+ |
+ const StatusLine c_statusLine200 := {c_sipNameVersion, 200, "OK"}; |
+ const StatusLine c_statusLine202 := {c_sipNameVersion, 202, "Accepted"}; |
+ |
+ const StatusLine c_statusLine300 := {c_sipNameVersion, 300, "Multiple Choices"}; |
+ const StatusLine c_statusLine301 := {c_sipNameVersion, 301, "Moved Permanently"}; |
+ const StatusLine c_statusLine302 := {c_sipNameVersion, 302, "Moved Temporarily"}; |
+ const StatusLine c_statusLine305 := {c_sipNameVersion, 305, "Use Proxy"}; |
+ const StatusLine c_statusLine380 := {c_sipNameVersion, 380, "Alternative Service"}; |
+ |
+ const StatusLine c_statusLine400 := {c_sipNameVersion, 400, "Bad Request"}; |
+ const StatusLine c_statusLine401 := {c_sipNameVersion, 401, "Unauthorized"}; |
+ const StatusLine c_statusLine402 := {c_sipNameVersion, 402, "Payment Required"}; |
+ const StatusLine c_statusLine403 := {c_sipNameVersion, 403, "Forbidden"}; |
+ const StatusLine c_statusLine404 := {c_sipNameVersion, 404, "Not Found"}; |
+ const StatusLine c_statusLine405 := {c_sipNameVersion, 405, "Method Not Allowed"}; |
+ const StatusLine c_statusLine406 := {c_sipNameVersion, 406, "Not Acceptable"}; |
+ const StatusLine c_statusLine407 := {c_sipNameVersion, 407, "Proxy Authentication Required"}; |
+ const StatusLine c_statusLine408 := {c_sipNameVersion, 408, "Request Timeout"}; |
+ const StatusLine c_statusLine410 := {c_sipNameVersion, 410, "Gone"}; |
+ const StatusLine c_statusLine413 := {c_sipNameVersion, 413, "Request Entity Too Large"}; |
+ const StatusLine c_statusLine414 := {c_sipNameVersion, 414, "Request-URI Too Long"}; |
+ const StatusLine c_statusLine415 := {c_sipNameVersion, 415, "Unsupported Media Type"}; |
+ const StatusLine c_statusLine416 := {c_sipNameVersion, 416, "Unsupported URI Scheme"}; |
+ const StatusLine c_statusLine420 := {c_sipNameVersion, 420, "Bad Extension"}; |
+ const StatusLine c_statusLine421 := {c_sipNameVersion, 421, "Extension Required"}; |
+ const StatusLine c_statusLine422 := {c_sipNameVersion, 422, "Session Interval Too Small"}; |
+ const StatusLine c_statusLine423 := {c_sipNameVersion, 423, "Interval Too Brief"}; |
+ const StatusLine c_statusLine433 := {c_sipNameVersion, 433, "Anonymity Disallowed"}; |
+ const StatusLine c_statusLine480 := {c_sipNameVersion, 480, "Temporarily Unavailable"}; |
+ const StatusLine c_statusLine481 := {c_sipNameVersion, 481, "Call/Transaction Does Not Exist"}; |
+ const StatusLine c_statusLine482 := {c_sipNameVersion, 482, "Loop Detected"}; |
+ const StatusLine c_statusLine483 := {c_sipNameVersion, 483, "Too Many Hops"}; |
+ const StatusLine c_statusLine484 := {c_sipNameVersion, 484, "Address Incomplete"}; |
+ const StatusLine c_statusLine485 := {c_sipNameVersion, 485, "Ambiguous"}; |
+ const StatusLine c_statusLine486 := {c_sipNameVersion, 486, "Busy Here"}; |
+ const StatusLine c_statusLine487 := {c_sipNameVersion, 487, "Request Terminated"}; |
+ const StatusLine c_statusLine488 := {c_sipNameVersion, 488, "Not Acceptable Here"}; |
+ const StatusLine c_statusLine493 := {c_sipNameVersion, 493, "Undecipherable"}; |
+ const StatusLine c_statusLine500 := {c_sipNameVersion, 500, "Server Internal Error"}; |
+ const StatusLine c_statusLine501 := {c_sipNameVersion, 501, "Not implemented"}; |
+ const StatusLine c_statusLine502 := {c_sipNameVersion, 502, "Bad Gateway"}; |
+ const StatusLine c_statusLine503 := {c_sipNameVersion, 503, "Service Unavailable"}; |
+ const StatusLine c_statusLine504 := {c_sipNameVersion, 504, "Server Time-out"}; |
+ const StatusLine c_statusLine505 := {c_sipNameVersion, 505, "Version Not Supported"}; |
+ const StatusLine c_statusLine513 := {c_sipNameVersion, 513, "Message Too Large"}; |
+ const StatusLine c_statusLine580 := {c_sipNameVersion, 580, "Precondition Failure"}; |
+ const StatusLine c_statusLine600 := {c_sipNameVersion, 600, "Busy Everywhere"}; |
+ const StatusLine c_statusLine603 := {c_sipNameVersion, 603, "Decline"}; |
+ const StatusLine c_statusLine604 := {c_sipNameVersion, 604, "Does Not Exist Anywhere"}; |
+ const StatusLine c_statusLine606 := {c_sipNameVersion, 606, "Not Acceptable"}; |
+ |
+} //end StatusLines |
+ |
+group SIPSyncPointNames { |
+ const charstring c_Ringing := "Ringing"; |
+ const charstring c_uPlane := "uPlane"; |
+ const charstring c_sync1 := "sync1"; |
+ const charstring c_sync2 := "sync2"; |
+ const charstring c_sync3 := "sync3"; |
+ const charstring c_sync4 := "sync4"; |
+ const charstring c_uPlaneStop := "uPlaneStop"; |
+ const charstring c_annoucA := "announcementA"; |
+ const charstring c_annoucB := "announcementB"; |
+ const charstring c_annouc := "announcement"; |
+ const charstring c_voicem := "voiceMessage"; |
+ } |
+ |
+} //end group Constants |
+ |
+group Types { |
+group SubTypes{// Subtypes |
+ |
+ group TokenTypes // TokensTypes |
+ { |
+ // [20] |
+ type enumerated FieldName |
+ { |
+ ACCEPT_E, |
+ ACCEPT_ENCODING_E, |
+ ACCEPT_LANGUAGE_E, |
+ ALERT_INFO_E, |
+ ALLOW_E, |
+ AUTHENTICATION_INFO_E, |
+ AUTHORIZATION_E, |
+ CALL_ID_E, |
+ CALL_INFO_E, |
+ CONTACT_E, |
+ CONTENT_DISPOSITION_E, |
+ CONTENT_ENCODING_E, |
+ CONTENT_LANGUAGE_E, |
+ CONTENT_LENGTH_E, |
+ CONTENT_TYPE_E, |
+ CSEQ_E, |
+ DATE_E, |
+ ERROR_INFO_E, |
+ EXPIRES_E, |
+ FROM_E, |
+ IN_REPLY_TO_E, |
+ MAX_FORWARDS_E, |
+ MIME_VERSION_E, |
+ MIN_EXPIRES_E, |
+ ORGANIZATION_E, |
+ PRIORITY_E, |
+ PROXY_AUTHENTICATE_E, |
+ PROXY_AUTHORIZATION_E, |
+ PROXY_REQUIRE_E, |
+ RECORD_ROUTE_E, |
+ REPLY_TO_E, |
+ REQUIRE_E, |
+ RETRY_AFTER_E, |
+ ROUTE_E, |
+ SERVER_E, |
+ SUBJECT_E, |
+ SUPPORTED_E, |
+ TIMESTAMP_E, |
+ TO_E, |
+ UNSUPPORTED_E, |
+ USER_AGENT_E, |
+ VIA_E, |
+ WARNING_E, |
+ WWW_AUTHENTICATE_E, |
+ |
+ // [3262/7.1] |
+ RACK_E, |
+ RSEQ_E, |
+ |
+ // [3265/7.2] |
+ ALLOW_EVENTS_E, |
+ EVENT_E, |
+ SUBSCRIPTION_STATE_E, |
+ |
+ // [3313] |
+ P_MEDIA_AUTHORIZATION_E, |
+ |
+ // [3323] |
+ PRIVACY_E, |
+ |
+ // [3325] |
+ P_ASSERTED_ID_E, |
+ P_PREFERRED_ID_E, |
+ P_PREFERRED_SERVICE_E, |
+ |
+ // [3326] |
+ REASON_E, |
+ |
+ // [3515] - REFER method |
+ REFER_TO_E, |
+ |
+ // [4488] - REFER method |
+ REFER_SUB_E, |
+ |
+ // [3891] |
+ REPLACES_E, |
+ |
+ // [3892] - REFER method |
+ REFERRED_BY_E, |
+ |
+ // [4244] |
+ HISTORY_INFO_E, |
+ |
+ // [3313] |
+ P_MEDIA_AUTH_E, |
+ |
+ // [3327] |
+ PATH_E, |
+ |
+ // [3329] |
+ SECURITY_CLIENT_E, |
+ SECURITY_SERVER_E, |
+ SECURITY_VERIFY_E, |
+ |
+ // [3455] |
+ P_ACCESS_NETWORK_INFO_E, |
+ P_ASSOCIATED_URI_E, |
+ P_CALLED_PARTY_E, |
+ P_CHARGING_FUNCTION_ADDRESSES_E, |
+ P_CHARGING_VECTOR_E, |
+ P_VISITED_NETWORK_E, |
+ |
+ // [3608] |
+ SERVICE_ROUTE_E, |
+ |
+ // [3841] |
+ ACCEPT_CONTACT_E, |
+ REQUEST_DISPOSITION_E, |
+ |
+ // [4028] |
+ MIN_SE_E, |
+ SESSION_EXPIRES_E, |
+ |
+ P_ASSERTED_SERVICE_E, |
+ |
+ //[5009] |
+ P_EARLY_MEDIA_E, |
+ |
+ //http://tools.ietf.org/html/draft-johnston-sipping-cc-uui-07 |
+ //Transporting User to User Call Control Information in SIP for ISDN Interworking |
+ USER_TO_USER_E, |
+ |
+ //[6442] /* @sic R5-133151 update of header fields sic@ */ |
+ GEOLOCATION_E, |
+ GEOLOCATION_ROUTING_E, |
+ |
+ SESSION_ID_E, |
+ |
+ SIP_ETAG_E, |
+ SIP_IF_MATCH_E |
+ } |
+ |
+ // [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 SipUriComponents { // sip-uri acc. to RFC 3261 cl. 19.1 |
+ UserInfo userInfo optional, |
+ HostPort hostPort |
+ } |
+ |
+ type record TelUriComponents { // tel-uri acc. to RFC 3966 |
+ charstring subscriber |
+ } |
+ |
+ type record UrnUriComponents { // urn-uri acc. to RFC 2141 |
+ charstring namespaceId, // e.g. "service" as acc. to RFC 5031 |
+ charstring namespaceSpecificString // e.g. "sos" |
+ } |
+ |
+ type union UriComponents { |
+ SipUriComponents sip, // scheme: "sip" or sips" |
+ TelUriComponents tel, // scheme: "tel" |
+ UrnUriComponents urn, // scheme: "urn" |
+ charstring other // scheme: none of the above schemes |
+ } |
+ |
+ type record SipUrl |
+ { |
+ charstring scheme, // e.g "sip" or "tel" |
+ UriComponents components, // corresponding to the scheme |
+ SemicolonParam_List urlParameters optional, |
+ AmpersandParam_List headers optional |
+ } |
+ |
+ // [20.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 |
+ } |
+ // draft-drage-sipping-service-identification-01 (July 2007) |
+ type record PPreferredService { |
+ FieldName fieldName (P_PREFERRED_SERVICE_E), |
+ charstring serviceId |
+ } |
+ |
+ }//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 RFC4488HeaderFieldTypes |
+ { |
+ // [4488] |
+ type record ReferSub { |
+ FieldName fieldName(REFER_SUB_E), |
+ boolean referSubValue, |
+ SemicolonParam_List referSubParams optional |
+ } |
+ }//end group RFC4488HeaderFieldTypes |
+ |
+ group RFC3329HeaderFieldTypes |
+ { |
+ // [RFC3329/2.2] |
+ type record SecurityMechanism { |
+ charstring mechName, |
+ SemicolonParam_List mechParams optional |
+ } |
+ |
+ type set of SecurityMechanism SecurityMechanism_List; |
+ |
+ type record SecurityClient { |
+ FieldName fieldName(SECURITY_CLIENT_E), |
+ SecurityMechanism_List securityMech |
+ } |
+ |
+ type record SecurityServer { |
+ FieldName fieldName(SECURITY_SERVER_E), |
+ SecurityMechanism_List securityMech |
+ } |
+ |
+ type record SecurityVerify { |
+ FieldName fieldName(SECURITY_VERIFY_E), |
+ SecurityMechanism_List securityMech |
+ } |
+ }//end group RFC3329HeaderFieldTypes |
+ |
+ group RFC3455HeaderFieldTypes |
+ { |
+ type record of NameAddrParam NameAddrParam_List; |
+ |
+ type record NameAddrParam { |
+ NameAddr nameAddr, |
+ SemicolonParam_List genericParams optional |
+ } |
+ //[3455/5.1] |
+ type record PAssociatedURI { |
+ FieldName fieldName(P_ASSOCIATED_URI_E), |
+ NameAddrParam_List nameAddrList |
+ } |
+ //[3455/5.2] |
+ type record PCalledPartyID { |
+ FieldName fieldName(P_CALLED_PARTY_E), |
+ NameAddrParam nameAddParams |
+ } |
+ |
+ type record of VnetworkSpec VnetworkSpec_List; |
+ |
+ type record VnetworkSpec { |
+ charstring vNetworkSpecToken, |
+ SemicolonParam_List genericParams optional |
+ } |
+ |
+ //[3455/5.3] |
+ type record PVisitedNetworkID { |
+ FieldName fieldName(P_VISITED_NETWORK_E), |
+ VnetworkSpec_List vNetWorkSpec |
+ } |
+ |
+ //[3455/5.4] |
+ type record PAccessNetworkInfo { |
+ FieldName fieldName(P_ACCESS_NETWORK_INFO_E), |
+ charstring accessType, |
+ SemicolonParam_List genericParams optional |
+ } |
+ |
+ //[3455/5.5] |
+ type record PChargingFunctionAddresses { |
+ FieldName fieldName(P_CHARGING_FUNCTION_ADDRESSES_E), |
+ SemicolonParam_List chargeAddrParams optional |
+ } |
+ |
+ //[3455/5.6] |
+ type record PChargingVector { |
+ FieldName fieldName(P_CHARGING_VECTOR_E), |
+ SemicolonParam_List chargeParams optional |
+ } |
+ }//end group RFC33455HeaderFieldTypes |
+ |
+ group RFC3515HeaderFieldTypes |
+ { |
+ // [3515] |
+ type record ReferTo { |
+ FieldName fieldName(REFER_TO_E), |
+ NameAddr nameAddr, |
+ SemicolonParam_List referToParams optional |
+ } |
+ }//end group RFC3515HeaderFieldTypes |
+ |
+ group RFC3608HeaderFieldTypes |
+ { |
+ // [3608] |
+ type record ServiceRoute { |
+ FieldName fieldName(SERVICE_ROUTE_E), |
+ RouteBody_List routeBody |
+ } |
+ }//end group RFC33608HeaderFieldTypes |
+ |
+ |
+ group RFC3841HeaderFieldTypes |
+ { |
+ // [3841] |
+ type record AcceptContact { |
+ FieldName fieldName(ACCEPT_CONTACT_E), |
+ AcRcValue_List acValues |
+ } |
+ |
+ type set of AcRcValue AcRcValue_List; |
+ |
+ type record AcRcValue { |
+ charstring wildcard(c_WILDCARD), |
+ SemicolonParam_List acRcParams optional |
+ } |
+ // [RFC 3841] |
+ type charstring Directive; |
+ type set of Directive Directive_List; |
+ type record RequestDisposition { |
+ FieldName fieldName (REQUEST_DISPOSITION_E), |
+ Directive_List directives |
+ } |
+ |
+ }// end group RFC3841HeaderFieldTypes |
+ |
+ group RFC3891HeaderFieldTypes |
+ { |
+ // [3891] |
+ type record Replaces |
+ { |
+ FieldName fieldName (REPLACES_E), |
+ 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 charstring StringList; |
+ |
+ type record HistoryInfoEntry { |
+ NameAddr nameAddr, |
+ StringList 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 |
+ } |
+ |
+ group RFC6442GeolocationConveyance |
+ { /* @sic R5-133151 update of header fields sic@ */ |
+ // [6442] |
+ type record Geolocation { // RFC6442 clause 4.1 |
+ FieldName fieldName(GEOLOCATION_E), |
+ SipUrl addrSpec, |
+ SemicolonParam_List geolocParam optional |
+ } |
+ type enumerated GeolocationRoutingState |
+ {GEOLOCATION_ROUTING_YES_E, |
+ GEOLOCATION_ROUTING_NO_E, |
+ GEOLOCATION_ROUTING_OTHER_E |
+ }; |
+ type record GeolocationRouting { // RFC6442 clause 4.2 |
+ FieldName fieldName(GEOLOCATION_ROUTING_E), |
+ GeolocationRoutingState state, |
+ GenericParam genericValue optional |
+ } |
+ }//end group RFC6442GeolocationConveyance |
+ |
+ type charstring SessIdString length(32); |
+ |
+ type record SessionId { |
+ FieldName fieldName (SESSION_ID_E), |
+ SessIdString sessid, |
+ GenericParam sessidParam optional |
+ } |
+ |
+ type charstring EntityTag; |
+ |
+ type record SIP_ETag { |
+ FieldName fieldName (SIP_ETAG_E), |
+ EntityTag entityTag |
+ } |
+ |
+ type record SIP_If_Match { |
+ FieldName fieldName (SIP_IF_MATCH_E), |
+ EntityTag entityTag |
+ } |
+ |
+ } // end group HeaderFieldTypes |
+ |
+ group MessageHeaderTypes |
+ { |
+ |
+ // Message-Header for all SIP requests and responses [20] |
+ type set MessageHeader |
+ { |
+ Accept accept optional, |
+ AcceptContact acceptContact optional, |
+ AcceptEncoding acceptEncoding optional, |
+ AcceptLanguage acceptLanguage optional, |
+ AlertInfo alertInfo optional, |
+ Allow allow optional, |
+ AllowEvents allowEvents optional, // 3265/7.2 |
+ AuthenticationInfo authenticationInfo optional, // only in responses |
+ Authorization authorization optional, // only in requests |
+ CallId callId optional, // optional only in Invalid test cases mandatory otherwise |
+ CallInfo callInfo optional, |
+ Contact contact optional, // optional in response and all requests except INVITE where mandatory |
+ ContentDisposition contentDisposition optional, |
+ ContentEncoding contentEncoding optional, |
+ ContentLanguage contentLanguage optional, |
+ ContentLength contentLength optional, // optional in responses and all requests except ACK where mandatory |
+ ContentType contentType optional, |
+ CSeq cSeq optional, // optional only in Invalid test cases mandatory otherwise |
+ Date date optional, |
+ ErrorInfo errorInfo optional, // only in responses |
+ Event event optional, // 3265/7.2 |
+ Expires expires optional, |
+ From fromField, |
+ Geolocation geolocation optional, // 6442 |
+ GeolocationRouting geolocationRouting optional, // 6442 @sic R5-133151 update of header fields sic@ |
+ HistoryInfo historyInfo optional, // 4244 |
+ InReplyTo inReplyTo optional, // only in requests |
+ MaxForwards maxForwards optional, // mandatory in requests not required in responses! |
+ MimeVersion mimeVersion optional, |
+ MinExpires minExpires optional, // only in responses |
+ MinSE minSE optional, // 4028 |
+ Organization organization optional, |
+ PAccessNetworkInfo pAccessNetworkInfo optional, // 3455 |
+ PAssertedID pAssertedID optional, // 3325 |
+ PAssertedService pAssertedService optional, |
+ PAssociatedURI pAssociatedURI optional, // 3455 |
+ Path path optional, // 3327 |
+ PCalledPartyID pCalledPartyID optional, // 3455 |
+ PChargingFunctionAddresses pChargingFunctionAddresses optional, // 3455 |
+ PChargingVector pChargingVector optional, // 3455 |
+ PEarlyMedia pEarlyMedia optional, // 5009 |
+ PMediaAuthorization pMediaAuthorization optional, // 3313 |
+ PPreferredID pPreferredID optional, // 3325 |
+ PPreferredService pPreferredService optional, // draft-drage-sipping-service-identification-01 (July 2007) |
+ Priority priority optional, // only in requests |
+ Privacy privacy optional, // 3323 |
+ ProxyAuthenticate proxyAuthenticate optional, // only in responses |
+ ProxyAuthorization proxyAuthorization optional, // only in requests |
+ ProxyRequire proxyRequire optional, // only in requests |
+ PVisitedNetworkID pVisitedNetworkID optional, // 3455 |
+ RAck rAck optional, // 3262/7.1 |
+ RSeq rSeq optional, // 3262/7.1 |
+ Reason reason optional, // 3326 |
+ RecordRoute recordRoute optional, |
+ RequestDisposition requestDisposition optional, // 3841 |
+ ReferredBy referredBy optional, // 3892 - REFER method |
+ ReferTo referTo optional, // 3515 - REFER method |
+ ReferSub referSub optional, // 4488 - REFER method |
+ Replaces replaces optional, // 3891 |
+ ReplyTo replyTo optional, // optional in responses and INVITE requests |
+ Require require optional, |
+ RetryAfter retryAfter optional, // only in responses |
+ Route route optional, // only in requests |
+ SecurityClient securityClient optional, // 3329 |
+ SecurityServer securityServer optional, // 3329 |
+ SecurityVerify securityVerify optional, // 3329 |
+ Server server optional, // only in responses |
+ ServiceRoute serviceRoute optional, // 3608 |
+ SessionExpires sessionExpires optional, // 4028 |
+ SessionId sessionId optional, |
+ SIP_ETag sipETag optional, |
+ SIP_If_Match sipIfMatch optional, |
+ Subject subject optional, // only in requests |
+ SubscriptionState subscriptionState optional, // 3265/7.2 |
+ Supported supported optional, |
+ Timestamp timestamp optional, |
+ To toField, |
+ Unsupported unsupported optional, // only in responses |
+ UserToUser userToUser optional, |
+ UserAgent userAgent optional, |
+ Via via, |
+ Warning warning optional, // only in responses |
+ WwwAuthenticate wwwAuthenticate optional, // only in responses |
+ UndefinedHeader_List undefinedHeader_List optional |
+ } |
+ |
+ } // end group MessageHeaderTypes |
+ |
+ group StartLineTypes |
+ { |
+ // Request-Line [7.1] |
+ type record RequestLine |
+ { |
+ Method method, |
+ SipUrl requestUri, |
+ charstring sipVersion |
+ } |
+ |
+ // Status-Line [7.2] |
+ type record StatusLine |
+ { |
+ charstring sipVersion, |
+ integer statusCode, |
+ charstring reasonPhrase |
+ } |
+ |
+ } // end group StartLineTypes |
+ |
+ |
+ group otherTypes{ |
+ |
+ type record SipUserProfile |
+ { |
+ /** @desc integer for the userprofile identifier |
+ */ |
+ integer id, |
+ |
+ /** @desc integer for Port number to exchange SIP messages |
+ */ |
+ integer currPort, |
+ |
+ /** @desc charstring for IP address to exchange SIP messages |
+ */ |
+ charstring currIpaddr, |
+ |
+ /** @desc integer for Port number to exchange SIP messages |
+ */ |
+ integer contactPort, |
+ |
+ /** @desc charstring for IP address to exchange SIP messages |
+ */ |
+ charstring contactIpaddr, |
+ |
+ /** @desc charstring for IP address used by the TS to exchange media streams |
+ */ |
+ charstring bearerIpaddr, |
+ |
+ /** @desc charstring for identity of the tester local domain |
+ */ |
+ charstring homeDomain, |
+ |
+ /** @desc charstring for identity of the tester local user |
+ */ |
+ charstring publUsername, |
+ |
+ /** @desc charstring for RFC 2617 3.2.1 qop options: |
+ * Quoted string of one or more tokens indicating the "quality of protection" values supported by the server. The |
+ * value "auth" indicates authentication; the value "auth-int" indicates authentication with integrity protection. |
+ */ |
+ charstring qop, |
+ |
+ /** @desc charstring for RFC 2617 3.2.2 username for authentication |
+ * The name of user in the specified realm |
+ */ |
+ charstring privUsername, |
+ |
+ /** @desc charstring for RFC 2617 3.2.2.2 passwd: A known shared secret, the password of user of the specified username |
+ */ |
+ charstring passwd, |
+ |
+ /** @desc charstring for registrar domain for authentication and request line |
+ */ |
+ charstring registrarDomain |
+ |
+ } |
+ |
+ |
+ } // end group otherTypes |
+ |
+ }// end group Subtypes |
+ |
+ |
+ |
+ group MSGtypes{ |
+ |
+ group RequestTypes |
+ { |
+ // [7.1] |
+ |
+ /** |
+ * |
+ * @desc generic type of a SIP request message |
+ * @member statusLine contains a method name, a Request-URI, and the protocol version |
+ * @member msgHeader include all possible header fields that are allowed to be present according to RFCs and other standards |
+ * @member messageBody depends on the request method, includes e.g. SDP message. |
+ * @member payload contains the whole message as it has been received in its text format |
+ */ |
+ type record Request |
+ { |
+ RequestLine requestLine, |
+ MessageHeader msgHeader, |
+ MessageBody messageBody optional, |
+ Payload payload optional |
+ } 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"} |
+ |
+ type union RequestUnion { |
+ REGISTER_Request Register, |
+ INVITE_Request Invite, |
+ OPTIONS_Request Options, |
+ BYE_Request Bye, |
+ CANCEL_Request Cancel, |
+ ACK_Request Ack, |
+ PRACK_Request Prack, |
+ NOTIFY_Request Notify, |
+ SUBSCRIBE_Request Subscribe, |
+ PUBLISH_Request Publish, |
+ UPDATE_Request Update, |
+ REFER_Request Refer, |
+ MESSAGE_Request Message |
+ } with { encode "SIPCodec"} |
+ |
+ } //with { encode "SIPCodec" }// end group RequestTypes |
+ |
+ group ResponseTypes |
+ { |
+ // [7.2] |
+ |
+ /** |
+ * |
+ * @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 |
+ |
+ }// end group MSGTypes |
+}// end group Types |
+ |
+} with {encode "LibSip V2"} // end module LibSip_TypesAndValues |
/v2.0.0/ttcn/LibSip_SIPTypesAndValues.ttcn |
---|
Property changes: |
Added: svn:keywords |
## -0,0 +1 ## |
+Id |
\ No newline at end of property |
Index: v2.0.0/ttcn/LibSip_MessageBodyTypes.ttcn |
=================================================================== |
--- v2.0.0/ttcn/LibSip_MessageBodyTypes.ttcn (nonexistent) |
+++ v2.0.0/ttcn/LibSip_MessageBodyTypes.ttcn (revision 552) |
@@ -0,0 +1,52 @@ |
+/******************************************************************************/ |
+// $Date: 2013-04-08 08:18:17 +0000 (Mo, 08 Apr 2013) $ |
+// $Author: seka $ |
+// $Rev: 8470 $ |
+/******************************************************************************/ |
+/* |
+* This module is part of LibSipV2. |
+*/ |
+ |
+module LibSip_MessageBodyTypes |
+{ |
+ import from LibSip_SDPTypes all; |
+ import from LibSip_SimpleMsgSummaryTypes all; |
+ import from LibSip_XMLTypes all; |
+ |
+// type charstring XmlBody; |
+ |
+ group MIMETypes { |
+ type union MIME_Encapsulated_Parts { |
+ SDP_Message sdpMessageBody, |
+ XmlBody xmlBody // if there is XML body |
+ // XMLMessage xmlMessage // if there is XML message (with header and body) |
+ }; |
+ |
+ type record MIME_Encapsulated_Part { |
+ charstring content_type, |
+ charstring content_disposition optional, |
+ MIME_Encapsulated_Parts mime_encapsulated_part |
+ }; |
+ |
+ type record MIME_Message { |
+ charstring boundary, // len: |
+ MimeEncapsulatedList mimeEncapsulatedList |
+ }; |
+ |
+ type record of MIME_Encapsulated_Part MimeEncapsulatedList; |
+ |
+ } // group MIMETypes |
+ |
+ type union MessageBody { |
+ SDP_Message sdpMessageBody, // if there is only SDP part |
+// XMLMessage xmlMessage, // if there is XML message (with header and body) |
+ XmlBody xmlBody, // if there is XML body |
+ MIME_Message mimeMessageBody, // if there is SDP and encapsulated ISUP part |
+ charstring sipfrag, // if content-Type is message/sipfrag (cp. NOTIFY, cp TS124147 A.4.3.1.2) |
+ charstring textplain, // if content type is text/plain (for testing long messages) |
+ SimpleMsgSummary simpleMsgSummary, // RFC 3842 |
+ octetstring smsMessage // encoded SMS message 3GPP 23.040, 24.011 |
+ }; |
+ |
+ |
+} |
Index: v2.0.0/ttcn/LibSip_SDPTypes.ttcn |
=================================================================== |
--- v2.0.0/ttcn/LibSip_SDPTypes.ttcn (nonexistent) |
+++ v2.0.0/ttcn/LibSip_SDPTypes.ttcn (revision 552) |
@@ -0,0 +1,324 @@ |
+/** |
+ * @author STF 346, STF366, STF368, STF369, STF450 |
+ * @version $Id$ |
+ * @desc This module defines message, attribute, structured and simple |
+ * SDP types as well constants used by LipSip constructs. <br> |
+ * Note that any changes made to the definitions in this module |
+ * may be overwritten by future releases of this library |
+ * End users are encouraged to contact the distributers of this |
+ * module regarding their modifications or additions |
+ * This module is part of LibSipV2. |
+ * @remark Adding of new attributes types is ok; |
+ * Adding of new optional attributes in @see SDP_attribute type |
+ * is ok; |
+ * Existing attribute types shall not be changed or removed - |
+ * change requests shall be made to http://t-ort.etsi.org |
+ */ |
+ |
+module LibSip_SDPTypes |
+{ |
+ group Constants |
+ { |
+ group SimpleConstants |
+ { |
+ // SDP net_type |
+ const charstring c_in := "IN"; |
+ |
+ // SDP addr_type |
+ const charstring c_ip4 := "IP4"; |
+ const charstring c_ip6 := "IP6"; |
+ |
+ // SDP_media_desc: media |
+ const charstring c_audio := "audio"; |
+ const charstring c_image := "image"; |
+ const charstring c_video := "video"; |
+ const charstring c_text := "text"; |
+ const charstring c_msrp := "msrp"; |
+ |
+ // SDP_media_desc: transport |
+ const charstring c_rtpAvp := "RTP/AVP"; |
+ const charstring c_rtpAvpf := "RTP/AVPF"; |
+ const charstring c_msrpTcp := "TCP/MSRP"; |
+ const charstring c_udptl := "Udptl"; |
+ |
+ // SDP_attribute_list constants: |
+ const charstring c_local := "local"; |
+ const charstring c_mandatory := "mandatory"; |
+ const charstring c_optional := "optional"; |
+ const charstring c_none := "none"; |
+ const charstring c_qos := "qos"; |
+ const charstring c_remote := "remote"; |
+ const charstring c_sendrecv := "sendrecv"; |
+ const charstring c_sendonly := "sendonly"; |
+ const charstring c_inactive := "inactive"; |
+ const charstring c_send := "send"; |
+ const charstring c_recv := "recv"; |
+ const charstring c_e2e := "e2e"; |
+ } |
+ } |
+ group Types |
+ { |
+ group SubTypes |
+ { |
+ group AttributeTypes |
+ { |
+ type record SDP_attribute_cat { |
+ charstring attr_value |
+ } |
+ |
+ 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_msrp { |
+ 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, |
+ SDP_attribute_msrp msrp, |
+ |
+ //* 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 |
/v2.0.0/ttcn/LibSip_SDPTypes.ttcn |
---|
Property changes: |
Added: svn:keywords |
## -0,0 +1 ## |
+Id |
\ No newline at end of property |
Index: v2.0.0/ttcn/LibSip_SMSFunctions.ttcn3 |
=================================================================== |
--- v2.0.0/ttcn/LibSip_SMSFunctions.ttcn3 (nonexistent) |
+++ v2.0.0/ttcn/LibSip_SMSFunctions.ttcn3 (revision 552) |
@@ -0,0 +1,52 @@ |
+/* |
+ * @author STF 435 |
+ * @version $Id$ |
+ * @desc This module provides the functions used by the test component |
+ * for SIP-SMS over IMS as specified in 3GPP 24.341 tests. |
+ * This module is part of LibSipV2. |
+ */ |
+module LibSip_SMSFunctions { |
+ import from LibSip_SMSTypesAndValues all; |
+ |
+ function f_IA5_2oct(charstring p_ASCII_String) |
+ return octetstring |
+ { |
+ var integer i; |
+ var integer k; |
+ var integer v_Length := lengthof(p_ASCII_String); |
+ var integer v_Temp; |
+ var octetstring v_Noctets :=''O; |
+ var bitstring v_TempBitSrc := ''B; |
+ var bitstring v_TempBitDes := ''B; |
+ |
+ if ((v_Length<=0) or (v_Length>160) or (((v_Length *7) mod 8) != 0)) |
+ { |
+ log("Invalid value of input string length."); |
+ } |
+ |
+ for(i:=0; i<v_Length; i:=i+1) |
+ { |
+ v_Temp := char2int(p_ASCII_String[i]); |
+ v_TempBitSrc := int2bit(v_Temp, 8); |
+ |
+ for(k:=1; k<=7; k:=k+1) |
+ { |
+ |
+ v_TempBitDes := v_TempBitSrc[8-k] & v_TempBitDes; |
+ |
+ if(((7*i+k) mod 8) == 0) |
+ { |
+ |
+ v_Noctets := v_Noctets & bit2oct(v_TempBitDes); |
+ v_TempBitDes := ''B; |
+ } |
+ } |
+ } |
+ |
+ return v_Noctets; |
+ |
+ } // f_IA5_2oct |
+ |
+ external function fx_GetSC_TimeStamp(integer p_TimeZone) return TP_ServiceCentreTimeStamp_Type; |
+ |
+} // End of module LibSip_SMSFunctions |
\ No newline at end of file |
Index: v2.0.0/ttcn/LibSip_SMSTemplates.ttcn3 |
=================================================================== |
--- v2.0.0/ttcn/LibSip_SMSTemplates.ttcn3 (nonexistent) |
+++ v2.0.0/ttcn/LibSip_SMSTemplates.ttcn3 (revision 552) |
@@ -0,0 +1,395 @@ |
+/* |
+ * @author STF 435 |
+ * @version $Id$ |
+ * @desc This module provides the types used by the test component |
+ * for SIP-SMS over IMS as specified in 3GPP 24.341 tests. |
+ * This module is part of LibSipV2. |
+ */ |
+module LibSip_SMSTemplates { |
+ import from LibCommon_DataStrings all; |
+ import from LibSip_SMSTypesAndValues all; |
+ import from LibSip_SMSFunctions all; |
+ |
+ group SMS_Templates_Group { |
+ |
+ /* Non-SMS Type Constraints */ |
+ |
+ |
+ |
+ template (present) TypeOfNumberingPlan cr_TypeOfNumberingPlanAny := |
+ { |
+ extBit := ?, |
+ typeOfNumber := ?, |
+ numberingPlanId := ? |
+ }; |
+ |
+ template (value) TypeOfNumberingPlan cs_TypeOfNumberingPlan := |
+ { |
+ extBit := '1'B, |
+ typeOfNumber := '001'B, // international number |
+ numberingPlanId := '0001'B // ISDN/telephony numbering plan (Rec. E.164/E.163) |
+ }; |
+ |
+ template (present) TypeOfNumberingPlan cr_TypeOfNumberingPlan := |
+ { |
+ extBit := ?, |
+ typeOfNumber := ?, |
+ numberingPlanId := ? |
+ }; |
+ |
+ /* End Non-SMS Type Constraints */ |
+ |
+ template (omit) RP_OriginatorAddress_dl cs_RP_OriginatorAddress_dl := |
+ { |
+ spare := omit, |
+ iei := omit, |
+ iel := '06'O, // 6 semi-octets |
+ typeOfNumberingPlan := cs_TypeOfNumberingPlan, |
+ digits := '001122'O |
+ }; |
+ |
+ template (omit) RP_OriginatorAddress_ul cr_RP_OriginatorAddress_ul := |
+ { |
+ spare := omit, |
+ iei := omit, |
+ iel := '00'O |
+ }; |
+ |
+ template RP_DestinationAddress_ul cr_RP_DestinationAddress_ul := |
+ { |
+ spare := omit, |
+ iei := omit, |
+ iel := ?, |
+ typeOfNumberingPlan := cr_TypeOfNumberingPlan, |
+ digits := ? |
+ }; |
+ template (omit) RP_DestinationAddress_dl cs_RP_DestinationAddress_dl := |
+ { |
+ spare := omit, |
+ iei := omit, |
+ iel := '00'O |
+ }; |
+ |
+ template (omit) RP_UserData cs_RP_UserData_DELIVER (octetstring p_Digits) := |
+ { |
+ spare := omit, |
+ iei := omit, |
+ iel := int2oct ((153 + lengthof (p_Digits)), 1), |
+ tP_PDU := {SMS_DELIVER := cs_SMS_DELIVER (p_Digits)} |
+ }; |
+ |
+ template (omit) RP_UserData cs_RP_UserData_SUBMIT_REPORT := |
+ { |
+ spare := '0'B, |
+ iei := tsc_IEI_RP_UserData, |
+ iel := '0A'O, // the TPDU data length is 10 octets |
+ tP_PDU := {SMS_SUBMIT_REPORT := cs_SMS_SUBMIT_REPORT} |
+ }; |
+ template (omit) RP_UserData cs_RP_UserData_STATUS_REPORT |
+ (TP_MessageReference_Type p_MessageRef, |
+ TP_Address_Type p_RecipientAddress, |
+ TP_ServiceCentreTimeStamp_Type p_SCTP |
+ ) := |
+ { |
+ spare := '0'B, |
+ iei := tsc_IEI_RP_UserData, |
+ iel := '0A'O, // the TPDU data length is 10 octets |
+ tP_PDU := {SMS_STATUS_REPORT := cs_SMS_STATUS_REPORT(p_MessageRef, p_RecipientAddress, p_SCTP)} |
+ }; |
+ |
+ /* |
+ template RP_UserData cr_RP_UserData (TP_PDU_Type p_TP_PDU) := |
+ { |
+ spare := omit, |
+ iei := omit, |
+ iel := ?, |
+ tP_PDU := p_TP_PDU |
+ }; |
+ */ |
+ template RP_UserData cr_RP_UserData_SUBMIT := |
+ { |
+ spare := omit, |
+ iei := omit, |
+ iel := ?, |
+ tP_PDU := {SMS_SUBMIT := cr_SMS_SUBMIT_VPF_REF} |
+ }; |
+ |
+ template RP_UserData cr_RP_UserData_DELIVER_REPORT := |
+ { |
+ spare := '0'B, |
+ iei := tsc_IEI_RP_UserData, |
+ iel := ?, |
+ tP_PDU := {SMS_DELIVER_REPORT := cr_SMS_DELIVER_REPORT} |
+ }; |
+ |
+ /* End SM-RP Type Constraints */ |
+ |
+ /* SM-RP PDU Constraints */ |
+ |
+ template (value) RP_DATA_dl_Type cs_RP_DATA_dl_DELIVER (octetstring p_Digits) := |
+ { |
+ spare5 := '00000'B, |
+ rP_MessageTypeIndicator := tsc_MT_RP_DATA_dl, |
+ rP_MessageReference := '00'O, |
+ rP_OriginatorAddress := cs_RP_OriginatorAddress_dl, |
+ rP_DestinationAddress := cs_RP_DestinationAddress_dl, |
+ rP_UserData := cs_RP_UserData_DELIVER(p_Digits) |
+ }; |
+ |
+ template (value) RP_DATA_dl_Type cs_RP_DATA_dl_STATUS_REPORT ( |
+ TP_MessageReference_Type p_MessageRef, |
+ TP_Address_Type p_RecipientAddress, |
+ TP_ServiceCentreTimeStamp_Type p_SCTP |
+ ) := |
+ { |
+ spare5 := '00000'B, |
+ rP_MessageTypeIndicator := tsc_MT_RP_DATA_dl, |
+ rP_MessageReference := '00'O, |
+ rP_OriginatorAddress := cs_RP_OriginatorAddress_dl, |
+ rP_DestinationAddress := cs_RP_DestinationAddress_dl, |
+ rP_UserData := cs_RP_UserData_STATUS_REPORT (p_MessageRef, p_RecipientAddress, p_SCTP) |
+ }; |
+ |
+ |
+ template (present) RP_DATA_ul_Type cr_RP_DATA_ul_SUBMIT := |
+ { |
+ spare5 := '00000'B, |
+ rP_MessageTypeIndicator := tsc_MT_RP_DATA_ul, |
+ rP_MessageReference := ?, |
+ rP_OriginatorAddress := cr_RP_OriginatorAddress_ul, |
+ rP_DestinationAddress := cr_RP_DestinationAddress_ul, |
+ rP_UserData := cr_RP_UserData_SUBMIT |
+ }; |
+ |
+ template (value) RP_ACK_Type cs_RP_ACK_SUBMIT_REPORT (Oct1 p_msgReference := '00'O):= |
+ { |
+ spare5 := '00000'B, |
+ rP_MessageTypeIndicator := tsc_MT_RP_ACK_dl, |
+ rP_MessageReference := p_msgReference, |
+ rP_UserData := cs_RP_UserData_SUBMIT_REPORT |
+ }; |
+ |
+ template (present) RP_ACK_Type cr_RP_ACK_DELIVER_REPORT := |
+ { |
+ spare5 := '00000'B, |
+ rP_MessageTypeIndicator := tsc_MT_RP_ACK_ul, |
+ rP_MessageReference := ?, |
+ rP_UserData := cr_RP_UserData_DELIVER_REPORT |
+ }; |
+ |
+ /* End SM-RP PDU Constraints */ |
+ |
+ /* SM-TP Type Constraints */ |
+ template (value) TP_ProtocolIdentifier_Type cr_TP_ProtocolIdentifier := |
+ { |
+ pidType := '01'B, |
+ interworking := '0'B, |
+ pidValue := '00000'B |
+ }; |
+ |
+ template (value) TP_ProtocolIdentifier_Type cs_TP_ProtocolIdentifier := |
+ { |
+ pidType := '01'B, |
+ interworking := '0'B, |
+ pidValue := '00000'B |
+ }; |
+ |
+ template (value) TP_DataCodingScheme_Type cs_TP_DataCodingScheme := |
+ { |
+ codingGroup := '0000'B, |
+ codeValue := '0000'B |
+ }; |
+ |
+ template TP_Address_Type cr_TP_AddressAny := |
+ { |
+ iel := ?, |
+ typeOfNumberingPlan := cr_TypeOfNumberingPlanAny, |
+ digits := * |
+ }; |
+ |
+ template (value) TP_Address_Type cs_TP_Address (octetstring p_Digits) := |
+ { |
+ iel := int2oct(2 * lengthof(p_Digits), 1), |
+ // length is number of useful semi-octets |
+ // as p_digits is declared as octetstring the number must be even |
+ typeOfNumberingPlan := cs_TypeOfNumberingPlan, |
+ digits := p_Digits |
+ }; |
+ |
+ template (value) TP_ParameterIndicator_Type cs_TP_ParameterIndicator := |
+ { |
+ extBit1 := '0'B, |
+ spare4 := '0000'B, |
+ tP_UDL := '0'B, |
+ tP_DCS := '0'B, |
+ tP_PID := '1'B |
+ }; |
+ |
+ /* End SM-TP Type Constraints */ |
+ |
+ /* SM-TP PDU Constraints */ |
+ |
+ template (value) SMS_DELIVER_Type cs_SMS_DELIVER (octetstring p_Digits) := |
+ { |
+ tP_ReplyPath := '0'B, |
+ tP_UserDataHeaderIndicator := '0'B, |
+ tP_StatusReportIndication := '1'B, |
+ spare2 := '00'B, |
+ tP_MoreMessagesToSend := '0'B, |
+ tP_MessageTypeIndicator := tsc_MT_SMS_DELIVER, |
+ tP_OriginatingAddress := cs_TP_Address (p_Digits), |
+ tP_ProtocolIdentifier := cs_TP_ProtocolIdentifier, |
+ tP_DataCodingScheme_Type := cs_TP_DataCodingScheme, |
+ tP_ServiceCentreTimeStamp := fx_GetSC_TimeStamp(0), // Time Zone 0 assumed |
+ tP_UserDataLength := int2oct(160,1), |
+ tP_UserData := f_IA5_2oct(tsc_Fox) |
+ }; |
+ |
+ template SMS_DELIVER_REPORT_Type cr_SMS_DELIVER_REPORT := |
+ { |
+ spare1 := '0'B, |
+ tP_UserDataHeaderIndicator := '0'B, |
+ spare4 := '0000'B, |
+ tP_MessageTypeIndicator := tsc_MT_SMS_DELIVER_REPORT, |
+ tP_FailureCause := omit, |
+ tP_ParameterIndicator := ?, |
+ tP_ProtocolIdentifier := cr_TP_ProtocolIdentifier, |
+ tP_DataCodingScheme_Type := *, |
+ tP_UserDataLength := *, |
+ tP_UserData := * |
+ }; |
+ |
+ template SMS_SUBMIT_Type cr_SMS_SUBMIT := |
+ { |
+ tP_ReplyPath := '0'B, |
+ tP_UserDataHeaderIndicator := '0'B, |
+ tP_StatusReportRequest := '1'B, |
+ tP_ValidityPeriodFormat := '??'B, |
+ tP_RejectDuplicates := '0'B, |
+ tP_MessageTypeIndicator := tsc_MT_SMS_SUBMIT, |
+ tP_MessageReference := ?, |
+ tP_DestinationAddress := cr_TP_AddressAny, |
+ tP_ProtocolIdentifier := cr_TP_ProtocolIdentifier, |
+ tP_DataCodingScheme_Type := ?, |
+ tP_ValidityPeriod := *, |
+ tP_UserDataLength := int2oct(160,1), |
+ tP_UserData := ? // any data will do: 140 octets |
+ }; |
+ |
+ template SMS_SUBMIT_Type cr_SMS_SUBMIT_VPF_NP := |
+ { |
+ tP_ReplyPath := '0'B, |
+ tP_UserDataHeaderIndicator := '0'B, |
+ tP_StatusReportRequest := '1'B, |
+ tP_ValidityPeriodFormat := '00'B, |
+ tP_RejectDuplicates := '0'B, |
+ tP_MessageTypeIndicator := tsc_MT_SMS_SUBMIT, |
+ tP_MessageReference := ?, |
+ tP_DestinationAddress := cr_TP_AddressAny, |
+ tP_ProtocolIdentifier := cr_TP_ProtocolIdentifier, |
+ tP_DataCodingScheme_Type := ?, |
+ tP_ValidityPeriod := omit, |
+ tP_UserDataLength := int2oct(160,1), |
+ tP_UserData := ? // any data will do: 140 octets |
+ }; |
+ |
+ template SMS_SUBMIT_Type cr_SMS_SUBMIT_VPF_REF := |
+ { |
+ tP_ReplyPath := '0'B, |
+ tP_UserDataHeaderIndicator := '0'B, |
+ tP_StatusReportRequest := '1'B, |
+ tP_ValidityPeriodFormat := '10'B, |
+ tP_RejectDuplicates := '0'B, |
+ tP_MessageTypeIndicator := tsc_MT_SMS_SUBMIT, |
+ tP_MessageReference := ?, |
+ tP_DestinationAddress := cr_TP_AddressAny, |
+ tP_ProtocolIdentifier := cr_TP_ProtocolIdentifier, |
+ tP_DataCodingScheme_Type := ?, |
+ tP_ValidityPeriod := ?, |
+ tP_UserDataLength := int2oct(160,1), |
+ tP_UserData := ? // any data will do: 140 octets |
+ }; |
+ |
+ template SMS_SUBMIT_Type cr_SMS_SUBMIT_VPF_ENH := |
+ { |
+ tP_ReplyPath := '0'B, |
+ tP_UserDataHeaderIndicator := '0'B, |
+ tP_StatusReportRequest := '1'B, |
+ tP_ValidityPeriodFormat := '01'B, |
+ tP_RejectDuplicates := '0'B, |
+ tP_MessageTypeIndicator := tsc_MT_SMS_SUBMIT, |
+ tP_MessageReference := ?, |
+ tP_DestinationAddress := cr_TP_AddressAny, |
+ tP_ProtocolIdentifier := cr_TP_ProtocolIdentifier, |
+ tP_DataCodingScheme_Type := ?, |
+ tP_ValidityPeriod := ?, |
+ tP_UserDataLength := int2oct(160,1), |
+ tP_UserData := ? // any data will do: 140 octets |
+ }; |
+ |
+ template SMS_SUBMIT_Type cr_SMS_SUBMIT_VPF_ABS := |
+ { |
+ tP_ReplyPath := '0'B, |
+ tP_UserDataHeaderIndicator := '0'B, |
+ tP_StatusReportRequest := '1'B, |
+ tP_ValidityPeriodFormat := '11'B, |
+ tP_RejectDuplicates := '0'B, |
+ tP_MessageTypeIndicator := tsc_MT_SMS_SUBMIT, |
+ tP_MessageReference := ?, |
+ tP_DestinationAddress := cr_TP_AddressAny, |
+ tP_ProtocolIdentifier := cr_TP_ProtocolIdentifier, |
+ tP_DataCodingScheme_Type := ?, |
+ tP_ValidityPeriod := ?, |
+ tP_UserDataLength := int2oct(160,1), |
+ tP_UserData := ? // any data will do: 140 octets |
+ }; |
+ |
+ template (value) SMS_SUBMIT_REPORT_Type cs_SMS_SUBMIT_REPORT := |
+ { |
+ spare1 := '0'B, |
+ tP_UserDataHeaderIndicator := '0'B, |
+ spare4 := '0000'B, |
+ tP_MessageTypeIndicator := tsc_MT_SMS_SUBMIT_REPORT, |
+ tP_FailureCause := omit, |
+ tP_ParameterIndicator := cs_TP_ParameterIndicator, |
+ tP_ServiceCentreTimeStamp := fx_GetSC_TimeStamp(0), // Time Zone 0 assumed |
+ tP_ProtocolIdentifier := cs_TP_ProtocolIdentifier, |
+ tP_DataCodingScheme_Type := omit, |
+ tP_UserDataLength := omit, |
+ tP_UserData := omit |
+ }; |
+ |
+ template (value) SMS_STATUS_REPORT_Type cs_SMS_STATUS_REPORT ( |
+ TP_MessageReference_Type p_MessageRef, |
+ TP_Address_Type p_RA, |
+ TP_ServiceCentreTimeStamp_Type p_SCTP |
+ ):= |
+ { |
+ // TS 34.229-1 clause A.7.5 |
+ spare1 := '0'B, |
+ tP_UserDataHeaderIndicator := '0'B, |
+ tP_StatusReportQualifier := '0'B, |
+ spare2 := '00'B, |
+ tP_MoreMessagesToSend := '0'B, |
+ tP_MessageTypeIndicator := tsc_MT_SMS_STATUS_REPORT, |
+ tP_MessageReference := p_MessageRef, |
+ tP_RecipientAddress := p_RA, |
+ tP_ServiceCentreTimeStamp := p_SCTP, |
+ tP_DischargeTime := '00000000000000'H, |
+ tP_Status := { |
+ reserved := '0'B, |
+ status := '0000000'B |
+ }, |
+ tP_ParameterIndicator := cs_TP_ParameterIndicator, |
+ tP_ProtocolIdentifier := cs_TP_ProtocolIdentifier, |
+ tP_DataCodingScheme_Type := omit, |
+ tP_UserDataLength := omit, |
+ tP_UserData := omit |
+ }; |
+ |
+ |
+ /* End SM-TP PDU Constraints */ |
+ |
+ } // group SMS_Templates_Group |
+ |
+} // End of module LibSip_SMSTypesAndValues |
\ No newline at end of file |
Index: v2.0.0/ttcn/LibSip_SMSTypesAndValues.ttcn |
=================================================================== |
--- v2.0.0/ttcn/LibSip_SMSTypesAndValues.ttcn (nonexistent) |
+++ v2.0.0/ttcn/LibSip_SMSTypesAndValues.ttcn (revision 552) |
@@ -0,0 +1,328 @@ |
+/******************************************************************************/ |
+// $Date: 2009-11-25 18:40:50 +0100 (Mi, 25 Nov 2009) $ |
+// $Author: STF160 $ |
+// $Rev: 2184 $ |
+/******************************************************************************/ |
+/* |
+ * This module contains the type definitions for SMS messages as specified in |
+ * 3GPP 24.011 and 3GPP 23.040 Rel 8 and 9. |
+ * SMS over IMS is specified in 3GPP 24.341. |
+ * This module is part of LibSipV2. |
+ */ |
+ |
+ |
+module LibSip_SMSTypesAndValues { |
+ import from LibCommon_DataStrings all; |
+ |
+ group SMS_Declarations { |
+ |
+ const RP_MessageTypeIndicator_Type tsc_MT_RP_DATA_ul := '000'B; /* RP_DATA_ul */ |
+ const RP_MessageTypeIndicator_Type tsc_MT_RP_DATA_dl := '001'B; /* RP_DATA_dl */ |
+ const RP_MessageTypeIndicator_Type tsc_MT_RP_ACK_ul := '010'B; /* RP_ACK_ul */ |
+ const RP_MessageTypeIndicator_Type tsc_MT_RP_ACK_dl := '011'B; /* RP_ACK_dl */ |
+ const RP_MessageTypeIndicator_Type tsc_MT_RP_ERROR_ul := '100'B; /* RP_ERROR_ul */ |
+ const RP_MessageTypeIndicator_Type tsc_MT_RP_ERROR_dl := '101'B; /* RP_ERROR_dl */ |
+ const RP_MessageTypeIndicator_Type tsc_MT_RP_SMMA := '110'B; /* RP_SMMA */ |
+ |
+ const TP_MessageTypeIndicator_Type tsc_MT_SMS_DELIVER := '00'B; /* SMS DELIVER */ |
+ const TP_MessageTypeIndicator_Type tsc_MT_SMS_DELIVER_REPORT := '00'B; /* SMS DELIVER REPORT */ |
+ const TP_MessageTypeIndicator_Type tsc_MT_SMS_STATUS_REPORT := '10'B; /* SMS STATUS REPORT */ |
+ const TP_MessageTypeIndicator_Type tsc_MT_SMS_COMMAND := '10'B; /* SMS COMMAND */ |
+ const TP_MessageTypeIndicator_Type tsc_MT_SMS_SUBMIT := '01'B; /* SMS SUBMIT, SMS SUBMIT REPORT */ |
+ const TP_MessageTypeIndicator_Type tsc_MT_SMS_SUBMIT_REPORT := '01'B; /* SMS SUBMIT, SMS SUBMIT REPORT */ |
+ |
+ const Bit7 tsc_IEI_RP_UserData := '1000001'B; /* 24.011 cl. 8.2.5.3 */ |
+ |
+ const charstring tsc_Fox := "The quick brown fox jumps over the lazy dog's back. Kaufen Sie Ihrer Frau vier bequeme Pelze. - 0123456789 - THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG'S BACK."; |
+ |
+ |
+ |
+ type record TypeOfNumberingPlan { /* 24.008 cl. 10.5.4.7, 10.5.4.9, 10.5.4.13 */ |
+ Bit1 extBit, /* Extension Bit */ |
+ Bit3 typeOfNumber, /* Type Of Number */ |
+ Bit4 numberingPlanId /* Numbering Plan Identification */ |
+ }; |
+ /* SM-RP Type Declarations */ |
+ |
+ type Bit3 RP_MessageTypeIndicator_Type; /* 24.011 cl. 8.2.2 */ |
+ type Oct1 RP_MessageReference_Type; /* 24.011 cl. 8.2.3 */ |
+ type record RP_OriginatorAddress_dl { /* 24.011 cl. 8.2.5.1 */ |
+ Bit1 spare optional, /* 0 */ |
+ Bit7 iei optional, /* 0101 1110 */ |
+ Oct1 iel, /* min value 2 and max value is 11 */ |
+ TypeOfNumberingPlan typeOfNumberingPlan, /* */ |
+ octetstring digits length(1..10) |
+ }; |
+ |
+ type record RP_OriginatorAddress_ul { /* 24.011 cl. 8.2.5.1 */ |
+ Bit1 spare optional, /* 0 */ |
+ Bit7 iei optional, /* 0101 1110 */ |
+ Oct1 iel /* 0 */ |
+ }; |
+ |
+ type record RP_DestinationAddress_ul { /* 24.011 cl. 8.2.5.2 */ |
+ Bit1 spare optional, /* 0 */ |
+ Bit7 iei optional, /* 0101 1110 */ |
+ Oct1 iel, /* min value 2 and max value is 11 */ |
+ TypeOfNumberingPlan typeOfNumberingPlan, /* */ |
+ octetstring digits length(1..10) |
+ }; |
+ type record RP_DestinationAddress_dl { /* 24.011 cl. 8.2.5.2 */ |
+ Bit1 spare optional, /* 0 */ |
+ Bit7 iei optional, /* 0101 1110 */ |
+ Oct1 iel /* 0 */ |
+ }; |
+ |
+ type record RP_UserData { /* 24.011 cl. 8.2.5.3 */ |
+ Bit1 spare optional, /* 0, present in case of TLV; omit in case of LV */ |
+ Bit7 iei optional, /* 1000001, present in case of TLV; omit in case of LV */ |
+ Oct1 iel, /* */ |
+ TP_PDU_Type tP_PDU /* <= 232 octets */ |
+ }; |
+ |
+ type record RP_Cause { /* 24.011 cl. 8.2.5.4 */ |
+ Bit1 spare optional, /* present in case of TLV; omit in case of LV */ |
+ Bit7 iei optional, /* present in case of TLV; omit in case of LV */ |
+ Oct1 iel, /* 2 or 3 */ |
+ Bit1 extBit1, /* 0 */ |
+ Bit7 causeValue1, /* Table 8.4/3GPP TS 24.011 */ |
+ Bit1 extBit2, /* 0 */ |
+ Bit7 causeValue2, /* Table 8.4/3GPP TS 24.011 */ |
+ Oct1 diagnostic optional /* Parameters included in the return error from MAP */ |
+ }; |
+ |
+ /* End SM-RP Type Declarations */ |
+ |
+ /* SM-RP PDU Declarations */ |
+ |
+ type record RP_DATA_dl_Type { /* 24.011 cl. 7.3.1.1 |
+ Direction: n -> ue */ |
+ Bit5 spare5, /* cl. 8.2.2 M V 5 bits */ |
+ RP_MessageTypeIndicator_Type rP_MessageTypeIndicator, /* cl. 8.2.2 M V 3 bits */ |
+ RP_MessageReference_Type rP_MessageReference, /* cl. 8.2.3 M LV 1 */ |
+ RP_OriginatorAddress_dl rP_OriginatorAddress, /* cl. 8.2.5.1 M LV 1-12 octets */ |
+ RP_DestinationAddress_dl rP_DestinationAddress, /* cl. 8.2.5.2 M LV 1 */ |
+ RP_UserData rP_UserData /* cl. 8.2.5.3 M LV <= 233 octets */ |
+ }; |
+ |
+ type record RP_DATA_ul_Type { /* 24.011 cl. 7.3.1.2 |
+ Direction: ue -> n */ |
+ Bit5 spare5, /* cl. 8.2.2 M V 5 bits */ |
+ RP_MessageTypeIndicator_Type rP_MessageTypeIndicator, /* cl. 8.2.2 M V 3 bits */ |
+ RP_MessageReference_Type rP_MessageReference, /* cl. 8.2.3 M LV 1 */ |
+ RP_OriginatorAddress_ul rP_OriginatorAddress, /* cl. 8.2.5.1 M LV 1 */ |
+ RP_DestinationAddress_ul rP_DestinationAddress, /* cl. 8.2.5.2 M LV 1 */ |
+ RP_UserData rP_UserData /* cl. 8.2.5.3 M LV <= 233 octets */ |
+ }; |
+ |
+ type record RP_SMMA_Type { /* 24.011 cl. 7.3.2 |
+ Direction: ue -> n */ |
+ Bit5 spare5, /* cl. 8.2.2 M V 5 bits */ |
+ RP_MessageTypeIndicator_Type rP_MessageTypeIndicator, /* cl. 8.2.2 M V 3 bits */ |
+ RP_MessageReference_Type rP_MessageReference /* cl. 8.2.3 M LV 1 */ |
+ }; |
+ |
+ type record RP_ACK_Type { /* 24.011 cl. 7.3.3 |
+ Direction: ue <-> n */ |
+ Bit5 spare5, /* cl. 8.2.2 M V 5 bits */ |
+ RP_MessageTypeIndicator_Type rP_MessageTypeIndicator, /* cl. 8.2.2 M V 3 bits */ |
+ RP_MessageReference_Type rP_MessageReference, /* cl. 8.2.3 M LV 1 */ |
+ RP_UserData rP_UserData optional /* cl. 8.2.5.3 O TLV <= 234 octets */ |
+ }; |
+ |
+ type record RP_ERROR_Type { /* 24.011 cl. 7.3.4 |
+ Direction: ue <-> n */ |
+ Bit5 spare5, /* cl. 8.2.2 M V 5 bits */ |
+ RP_MessageTypeIndicator_Type rP_MessageTypeIndicator, /* cl. 8.2.2 M V 3 bits */ |
+ RP_MessageReference_Type rP_MessageReference, /* cl. 8.2.3 M LV 1 */ |
+ RP_Cause rP_Cause, /* cl. 8.2.5.4 M LV 2-3 */ |
+ RP_UserData rP_UserData optional /* cl. 8.2.5.3 O TLV <= 234 octets */ |
+ }; |
+ |
+ type union RP_PDU_Type { |
+ RP_DATA_dl_Type RP_DATA_dl, |
+ RP_DATA_ul_Type RP_DATA_ul, |
+ RP_SMMA_Type RP_SMMA, |
+ RP_ACK_Type RP_ACK, |
+ RP_ERROR_Type RP_ERROR |
+ }; |
+ |
+ /* End SM-RP PDU Declarations */ |
+ |
+ /* SM-TP Type Declarations */ |
+ |
+ type record TP_Address_Type { /* 23.040 cl. 9.1.2.5 */ |
+ Oct1 iel, /* min value 2 and max value is 11 */ |
+ TypeOfNumberingPlan typeOfNumberingPlan, |
+ octetstring digits length(0..10) optional |
+ }; |
+ |
+ type Bit2 TP_MessageTypeIndicator_Type; /* 23.040 cl. 9.2.3.1 */ |
+ type Oct1 TP_MessageReference_Type; /* 23.040 cl. 9.2.3.6 */ |
+ type Oct1 TP_UserDataLength_Type; /* 23.040 cl. 9.2.3.16 */ |
+ |
+ type record TP_ProtocolIdentifier_Type { /* 23.040 cl. 9.2.3.9 */ |
+ Bit2 pidType, /* */ |
+ Bit1 interworking, /* */ |
+ Bit5 pidValue /* */ |
+ }; |
+ |
+ type record TP_DataCodingScheme_Type { /* 23.040 cl. 9.2.3.10 + 23.040 cl. 4 */ |
+ Bit4 codingGroup, /* */ |
+ Bit4 codeValue /* */ |
+ }; |
+ |
+ type hexstring TP_ServiceCentreTimeStamp_Type length (14); /* 23.040 cl. 9.2.3.11 */ |
+ |
+ type Oct1 TP_ValidityPeriodRelative_Type; /* 23.040 cl. 9.2.3.12.1 */ |
+ |
+ type hexstring TP_ValidityPeriodAbsolute_Type length (14); /* 23.040 cl. 9.2.3.12.2 */ |
+ |
+ type record TP_ValidityPeriodEnhanced_Type { /* 23.040 cl. 9.2.3.12.3 */ |
+ Bit1 extBit, /* */ |
+ Bit1 singleShot, /* */ |
+ Bit3 spare3, /* */ |
+ Bit3 validityPeriodFormat, /* */ |
+ Oct6 validityPeriod /* */ |
+ }; |
+ |
+ type union TP_ValidityPeriod_Type { /* 23.040 cl. 9.2.3.3 */ |
+ TP_ValidityPeriodRelative_Type TP_ValidityPeriodRelative, /* Relative format */ |
+ TP_ValidityPeriodAbsolute_Type TP_ValidityPeriodAbsolute, /* Absolute format */ |
+ TP_ValidityPeriodEnhanced_Type TP_ValidityPeriodEnhanced /* Enhanced format */ |
+ }; |
+ |
+ type record TP_Status_Type { /* 23.040 cl. 9.2.3.15 */ |
+ Bit1 reserved, /* */ |
+ Bit7 status /* */ |
+ }; |
+ |
+ type Bit8 TP_Command_Type; /* 23.040 cl. 9.2.3.19 */ |
+ |
+ type record TP_ParameterIndicator_Type { /* 23.040 cl. 9.2.3.27 */ |
+ Bit1 extBit1, /* */ |
+ Bit4 spare4, /* */ |
+ Bit1 tP_UDL, /* */ |
+ Bit1 tP_DCS, /* */ |
+ Bit1 tP_PID /* */ |
+ }; |
+ |
+ /* End SM-TP Type Declarations */ |
+ |
+ /* SM-TP PDU Declarations */ |
+ |
+ type record SMS_DELIVER_Type { /* 23.040 cl. 9.2.2.1 |
+ Direction: n -> ue */ |
+ Bit1 tP_ReplyPath, /* 23.040 cl. 9.2.3.17 */ |
+ Bit1 tP_UserDataHeaderIndicator, /* 23.040 cl. 9.2.3.23 */ |
+ Bit1 tP_StatusReportIndication, /* 23.040 cl. 9.2.3.4 */ |
+ Bit2 spare2, /* */ |
+ Bit1 tP_MoreMessagesToSend, /* 23.040 cl. 9.2.3.2 */ |
+ TP_MessageTypeIndicator_Type tP_MessageTypeIndicator, /* 23.040 cl. 9.2.3.1 */ |
+ TP_Address_Type tP_OriginatingAddress, /* 23.040 cl. 9.1.2.5 */ |
+ TP_ProtocolIdentifier_Type tP_ProtocolIdentifier, /* 23.040 cl. 9.2.3.9 */ |
+ TP_DataCodingScheme_Type tP_DataCodingScheme_Type, /* 23.040 cl. 9.2.3.10 */ |
+ TP_ServiceCentreTimeStamp_Type tP_ServiceCentreTimeStamp, /* 23.040 cl. 9.2.3.11 */ |
+ TP_UserDataLength_Type tP_UserDataLength, /* 23.040 cl. 9.2.3.16, derived from SUBMIT */ |
+ octetstring tP_UserData length (0..140) optional /* 23.040 cl. 9.2.3.24, derived from SUBMIT */ |
+ }; |
+ |
+ type record SMS_DELIVER_REPORT_Type { /* 23.040 cl. 9.2.2.1a |
+ Direction: ue -> n */ |
+ Bit1 spare1, /* */ |
+ Bit1 tP_UserDataHeaderIndicator, /* 23.040 cl. 9.2.3.23 */ |
+ Bit4 spare4, /* */ |
+ TP_MessageTypeIndicator_Type tP_MessageTypeIndicator, /* 23.040 cl. 9.2.3.1 */ |
+ Oct1 tP_FailureCause optional, /* 23.040 cl. 9.2.3.22, provided if RP_ERROR, not if RP_ACK */ |
+ TP_ParameterIndicator_Type tP_ParameterIndicator, /* 23.040 cl. 9.2.3.27 */ |
+ TP_ProtocolIdentifier_Type tP_ProtocolIdentifier optional, /* 23.040 cl. 9.2.3.9 */ |
+ TP_DataCodingScheme_Type tP_DataCodingScheme_Type optional, /* 23.040 cl. 9.2.3.10 */ |
+ TP_UserDataLength_Type tP_UserDataLength optional, /* 23.040 cl. 9.2.3.16 */ |
+ octetstring tP_UserData length (0..159) optional /* 23.040 cl. 9.2.3.24 */ |
+ }; |
+ |
+ type record SMS_SUBMIT_Type { /* 23.040 cl. 9.2.2.2 |
+ Direction: ue -> n */ |
+ Bit1 tP_ReplyPath, /* 23.040 cl. 9.2.3.17 */ |
+ Bit1 tP_UserDataHeaderIndicator, /* 23.040 cl. 9.2.3.23 */ |
+ Bit1 tP_StatusReportRequest, /* 23.040 cl. 9.2.3.5 */ |
+ Bit2 tP_ValidityPeriodFormat, /* 23.040 cl. 9.2.3.3 */ |
+ Bit1 tP_RejectDuplicates, /* 23.040 cl. 9.2.3.25 */ |
+ TP_MessageTypeIndicator_Type tP_MessageTypeIndicator, /* 23.040 cl. 9.2.3.1 */ |
+ TP_MessageReference_Type tP_MessageReference, /* 23.040 cl. 9.2.3.6 */ |
+ TP_Address_Type tP_DestinationAddress, /* 23.040 cl. 9.1.2.5 */ |
+ TP_ProtocolIdentifier_Type tP_ProtocolIdentifier, /* 23.040 cl. 9.2.3.9 */ |
+ TP_DataCodingScheme_Type tP_DataCodingScheme_Type, /* 23.040 cl. 9.2.3.10 */ |
+ // one of the subsequent ValidityPeriod solutions has be removed |
+ TP_ValidityPeriod_Type tP_ValidityPeriod optional, /* 23.040 cl. 9.2.3.12 */ |
+ // TP_ValidityPeriodRelative_Type tP_ValidityPeriodRelative optional, /* 23.040 cl. 9.2.3.12.1 */ |
+ // TP_ValidityPeriodAbsolute_Type tP_ValidityPeriodAbsolute optional, /* 23.040 cl. 9.2.3.12.2 */ |
+ // TP_ValidityPeriodEnhanced_Type tP_ValidityPeriodEnhanced optional, /* 23.040 cl. 9.2.3.12.3 */ |
+ TP_UserDataLength_Type tP_UserDataLength, /* 23.040 cl. 9.2.3.16 */ |
+ octetstring tP_UserData length (0..140) optional /* 23.040 cl. 9.2.3.24 */ |
+ }; |
+ type record SMS_SUBMIT_REPORT_Type { /* 23.040 cl. 9.2.2.2a |
+ Direction: n -> ue */ |
+ Bit1 spare1, /* */ |
+ Bit1 tP_UserDataHeaderIndicator, /* 23.040 cl. 9.2.3.23 */ |
+ Bit4 spare4, /* */ |
+ TP_MessageTypeIndicator_Type tP_MessageTypeIndicator, /* 23.040 cl. 9.2.3.1 */ |
+ Oct1 tP_FailureCause optional, /* 23.040 cl. 9.2.3.22, provided if RP_ERROR, not if RP_ACK */ |
+ TP_ParameterIndicator_Type tP_ParameterIndicator, /* 23.040 cl. 9.2.3.27 */ |
+ TP_ServiceCentreTimeStamp_Type tP_ServiceCentreTimeStamp, /* 23.040 cl. 9.2.3.11 */ |
+ TP_ProtocolIdentifier_Type tP_ProtocolIdentifier optional, /* 23.040 cl. 9.2.3.9 */ |
+ TP_DataCodingScheme_Type tP_DataCodingScheme_Type optional, /* 23.040 cl. 9.2.3.10 */ |
+ TP_UserDataLength_Type tP_UserDataLength optional, /* 23.040 cl. 9.2.3.16 */ |
+ octetstring tP_UserData length (0..152) optional /* 23.040 cl. 9.2.3.24 */ |
+ }; |
+ |
+ type record SMS_STATUS_REPORT_Type { /* 23.040 cl. 9.2.2.3 |
+ Direction: n -> ue */ |
+ Bit1 spare1, /* */ |
+ Bit1 tP_UserDataHeaderIndicator, /* 23.040 cl. 9.2.3.23 */ |
+ Bit1 tP_StatusReportQualifier, /* 23.040 cl. 9.2.3.26 */ |
+ Bit2 spare2, /* */ |
+ Bit1 tP_MoreMessagesToSend, /* 23.040 cl. 9.2.3.2 */ |
+ TP_MessageTypeIndicator_Type tP_MessageTypeIndicator, /* 23.040 cl. 9.2.3.1 */ |
+ TP_MessageReference_Type tP_MessageReference, /* 23.040 cl. 9.2.3.6 */ |
+ TP_Address_Type tP_RecipientAddress, /* 23.040 cl. 9.1.2.5 */ |
+ TP_ServiceCentreTimeStamp_Type tP_ServiceCentreTimeStamp, /* 23.040 cl. 9.2.3.11 */ |
+ TP_ServiceCentreTimeStamp_Type tP_DischargeTime, /* 23.040 cl. 9.2.3.12 */ |
+ TP_Status_Type tP_Status, /* 23.040 cl. 9.2.3.15 */ |
+ TP_ParameterIndicator_Type tP_ParameterIndicator optional, /* 23.040 cl. 9.2.3.27 */ |
+ TP_ProtocolIdentifier_Type tP_ProtocolIdentifier optional, /* 23.040 cl. 9.2.3.9 */ |
+ TP_DataCodingScheme_Type tP_DataCodingScheme_Type optional, /* 23.040 cl. 9.2.3.10 */ |
+ TP_UserDataLength_Type tP_UserDataLength optional, /* 23.040 cl. 9.2.3.16 */ |
+ octetstring tP_UserData length (0..143) optional /* 23.040 cl. 9.2.3.24 */ |
+ }; |
+ |
+ type record SMS_COMMAND_Type { /* 23.040 cl. 9.2.2.4 |
+ Direction: ue -> n */ |
+ Bit1 spare1, /* */ |
+ Bit1 tP_UserDataHeaderIndicator, /* 23.040 cl. 9.2.3.23 */ |
+ Bit1 tP_StatRptReq, /* Table 8.4/3GPP TS 24.011 */ |
+ Bit3 spare3, /* */ |
+ TP_MessageTypeIndicator_Type tP_MessageTypeIndicator, /* 23.040 cl. 9.2.3.1 */ |
+ TP_MessageReference_Type tP_MessageReference, /* 23.040 cl. 9.2.3.6 */ |
+ TP_ProtocolIdentifier_Type tP_ProtocolIdentifier, /* 23.040 cl. 9.2.3.9 */ |
+ TP_Command_Type tP_CommandType, /* 23.040 cl. 9.2.3.19 */ |
+ TP_MessageReference_Type tP_MessageNumber, /* 23.040 cl. 9.2.3.18 */ |
+ TP_Address_Type tP_DestinationAddress, /* 23.040 cl. 9.1.2.5 */ |
+ TP_UserDataLength_Type tP_CommandDataLength, /* 23.040 cl. 9.2.3.20 (number of octets) */ |
+ octetstring tP_CommandData length (0..156) optional /* 23.040 cl. 9.2.3.21 */ |
+ }; |
+ |
+ type union TP_PDU_Type { |
+ SMS_DELIVER_Type SMS_DELIVER, |
+ SMS_DELIVER_REPORT_Type SMS_DELIVER_REPORT, |
+ SMS_SUBMIT_Type SMS_SUBMIT, |
+ SMS_SUBMIT_REPORT_Type SMS_SUBMIT_REPORT, |
+ SMS_STATUS_REPORT_Type SMS_STATUS_REPORT, |
+ SMS_COMMAND_Type SMS_COMMAND |
+ }; |
+ |
+ /* End SM-TP PDU Declarations */ |
+ |
+ } with { encode "SMS Types"} // group SMS_Declarations |
+ |
+} // End of module LibSip_SMSTypesAndValues |
Index: v2.0.0/ttcn/LibSip_SimpleMsgSummaryTypes.ttcn |
=================================================================== |
--- v2.0.0/ttcn/LibSip_SimpleMsgSummaryTypes.ttcn (nonexistent) |
+++ v2.0.0/ttcn/LibSip_SimpleMsgSummaryTypes.ttcn (revision 552) |
@@ -0,0 +1,59 @@ |
+/** |
+ * @author STF 406 |
+ * @version $Id: LibSip_SimpleMsgSummaryTypes.ttcn 488 2010-11-08 10:17:19Z pintar $ |
+ * @desc This module provides the SMS type system for SIP tests. |
+ * This module is part of LibSipV2. |
+ */ |
+module LibSip_SimpleMsgSummaryTypes { // RFC 3842 |
+ |
+ group SMSConstants{ |
+ |
+ // IMS ETSI name MWI application |
+ const charstring c_imsEtsiMwiApplication := "application/simple-message-summary"; |
+ |
+ // msg_status line := "Message-Waiting" |
+ const charstring c_messageWaiting := "Message-Waiting"; |
+ |
+ // msg_status line := "Message-Account" |
+ const charstring c_messageAccount := "Message-Account"; |
+ |
+ // msg_summary line := "Voice-Message" |
+ const charstring c_voiceMessage := "Voice-Message"; |
+ |
+ } |
+ |
+ group SMSTypes{ |
+ //TODO add (SMS sms) into type union MessageBody{ in module LibSIPTypesAndValues |
+ |
+ type record SimpleMsgSummary { //Simple_message_summary |
+ Msg_status_line msg_status_line, |
+ Msg_account msg_account optional, |
+ Msg_summary_line_list msg_summary_line_list optional, |
+ Opt_msg_headers opt_msg_headers optional |
+ } |
+ |
+ type record Msg_status_line { |
+ charstring msg_type, |
+ charstring msg_status |
+ } |
+ |
+ type record Msg_account { |
+ charstring msg_type_account, |
+ charstring account_URI |
+ } |
+ |
+ type set of Msg_summary_line Msg_summary_line_list; |
+ |
+ type record Msg_summary_line { |
+ charstring msg_context_class, |
+ charstring msgs, |
+ charstring urgent_msgs optional |
+ } |
+ |
+ type set of charstring Opt_msg_headers; |
+ |
+ //type integer msgcount length(1); //msgs and urgent_msgs can be dividet into subtypes |
+ } |
+ |
+ |
+} |
\ No newline at end of file |
Index: v2.0.0/ttcn/LibSip_XMLTypes.ttcn |
=================================================================== |
--- v2.0.0/ttcn/LibSip_XMLTypes.ttcn (nonexistent) |
+++ v2.0.0/ttcn/LibSip_XMLTypes.ttcn (revision 552) |
@@ -0,0 +1,124 @@ |
+/** |
+ * @author STF 346, STF366, STF368, STF369 |
+ * @version $Id$ |
+ * @desc This module provides the XML type system for SIP tests. |
+ * The types have been generated automatically, followed by manual modifications: |
+ * - bitType substituted by OneBitType |
+ * - twobitType substituted by TwoBitType |
+ * - addition of pattern for: OneBitType, TwoBitType, ThreeBitType, FourBitType, FourBitType, SixBitType |
+ * - application of enumerated for: State_type, Endpoint_status_type, Joining_type, Disconnection_type, Media_status_type, |
+ * Originating_identity_presentation_restriction, Terminating_identity_presentation_restriction |
+ * - addition of length value: NetworkIdentityType, SixteenbitType |
+ * - addition of value restriction: CugIndexType |
+ * - substitution of "content" by "choice": Call_type, Mcid |
+ * - additional type renaming (upper first letter): AbsService, Anonymous, Busy, |
+ * Communication_diverted, Conference_description_type, Conference_info, |
+ * Conference_media_type, Conference_medium_type, Conference_state_type, |
+ * Conference_type, Cug, CugRequestType, Empty_element_type, Endpoint_type, |
+ * Execution_type, Host_type, Keywords_type, Media, Media_type, No_answer, |
+ * Not_reachable, Not_registered, Originating_identity_presentation, Presence_status, |
+ * Presence_status_activity_type, RequestType, ResponseType, Roaming, |
+ * Rule_deactivated, Sidebars_by_val_type, Simservs, SimservType, |
+ * Terminating_identity_presentation, Uri_type, Uris_type, User_roles_type, |
+ * User_languages_type, User_type, Users_type |
+ * |
+ * - new group CDIV added by STF369 |
+ * - new group ACR_CD added by STF38 |
+ * - new types RegInfo and Pidf_Lo added by STF160 |
+ * |
+ * This module is part of LibSipV2. |
+ */ |
+module LibSip_XMLTypes { |
+ |
+ import from http_www_w3_org_XML_1998_namespace language "XSD" all |
+ with { |
+ extension "File:../xsd/xml.xsd" |
+ } |
+ |
+ import from urn_ietf_params_xml_ns_common_policy language "XSD" all |
+ with { |
+ extension "File:../xsd/common-policy.xsd" |
+ } |
+ |
+ import from urn_ietf_params_xml_ns_resource_lists language "XSD" all |
+ with { |
+ extension "File:../xsd/ResourceList.xsd" |
+ } |
+ |
+ import from http_uri_etsi_org_ngn_params_xml_simservs_xcap language "XSD" all |
+ with { |
+ extension "File:../xsd/SupplementaryServices.xsd" |
+ } |
+ |
+ import from http_uri_etsi_org_ngn_params_xml_simservs_mcid language "XSD" all |
+ with { |
+ extension "File:../xsd/MCID.xsd" |
+ } |
+ |
+ import from NoTargetNamespace language "XSD" all |
+ with { |
+ extension "File:../xsd/Ims3gpp.xsd" |
+ } |
+ |
+ import from urn_3gpp_ns_cw_1_0 language "XSD" all |
+ with { |
+ extension "File:../xsd/cw.xsd" |
+ } |
+ |
+ import from urn_ietf_params_xml_ns_conference_info language "XSD" all |
+ with { |
+ extension "File:../xsd/CONF.xsd" |
+ } |
+ |
+ import from http_uri_etsi_org_ngn_params_xml_simservs_pstn language "XSD" all |
+ with { |
+ extension "File:../xsd/PSTN.xsd" |
+ } |
+ |
+ import from http_uri_etsi_org_ngn_params_xml_comm_div_info language "XSD" all |
+ with { |
+ extension "File:../xsd/CDIVN.xsd" |
+ } |
+ |
+ import from urn_oma_xml_xdm_common_policy language "XSD" all |
+ with { |
+ extension "File:../xsd/xdm_commonPolicy-v1_0.xsd" |
+ } |
+ // RFC 3680 Registration Info |
+ import from urn_ietf_params_xml_ns_reginfo language "XSD" all |
+ with { |
+ extension "File:../xsd/regInfo.xsd" |
+ } |
+ // RFC 3863 Presence Information Data Format |
+ import from urn_ietf_params_xml_ns_pidf language "XSD" all |
+ with { |
+ extension "File:../xsd/pidf.xsd" |
+ } |
+ // RFC 4119 Presence Information Data Format, Location Object extension |
+ import from urn_ietf_params_xml_ns_pidf_geopriv10_basicPolicy language "XSD" all |
+ with { |
+ extension "File:../xsd/geopriv10basic.xsd" |
+ } |
+ |
+ // RFC 4119 Presence Information Data Format, Location Object extension |
+ import from urn_ietf_params_xml_ns_pidf_geopriv10 language "XSD" all |
+ with { |
+ extension "File:../xsd/pidf_lo.xsd" |
+ } |
+ |
+ group XmlTypes { |
+ type union XmlBody { |
+ Mcid mcid, // if there is XML Mcid |
+ Comm_div_info_type cdivn, // if there is XML cdivn |
+ Simservs simservs, // if there is XML simservs (Oip/r, Tip/r, Call Diversion, ICB, OCB ...) |
+ Conference_type conference, // if there is XML conf |
+ Ims_cw cw, // if there is XML cw (defined in X_3gpp_ns_cw_1_0.ttcn3view) |
+ Cug cug, // if there is XML cug (defined in org_etsi_uri__ngn_params_xml_simservs_xcap.ttcn3view) |
+ TIMS3GPP ims3gpp, // if there is XML IMS 3GPP |
+ PSTN_transit pstnTransit, // if there is XML PSTN_transit |
+ Resource_lists resourceLists, // if there is XML Resource List data |
+ Reginfo regInfo, // if it is a registration event |
+ Geopriv geopriv // if it is a Presence Information Data Format Location Object |
+ } |
+ } |
+} |
\ No newline at end of file |
/v2.0.0/ttcn/LibSip_XMLTypes.ttcn |
---|
Property changes: |
Added: svn:keywords |
## -0,0 +1 ## |
+Id |
\ No newline at end of property |
Index: v2.0.0/XSDAUX.ttcn |
=================================================================== |
--- v2.0.0/XSDAUX.ttcn (nonexistent) |
+++ v2.0.0/XSDAUX.ttcn (revision 552) |
@@ -0,0 +1,150 @@ |
+module XSDAUX {//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 { |
+ } |
+} |
Index: v2.0.0/xsd/CDIVN.xsd |
=================================================================== |
--- v2.0.0/xsd/CDIVN.xsd (nonexistent) |
+++ v2.0.0/xsd/CDIVN.xsd (revision 552) |
@@ -0,0 +1,249 @@ |
+ |
+<xs:schema |
+ targetNamespace="http://uri.etsi.org/ngn/params/xml/comm-div-info" |
+ xmlns:tns="http://uri.etsi.org/ngn/params/xml/comm-div-info" |
+ xmlns:xs="http://www.w3.org/2001/XMLSchema" |
+ xmlns="http://uri.etsi.org/ngn/params/xml/comm-div-info" |
+ elementFormDefault="qualified" |
+ attributeFormDefault="unqualified"> |
+ <!-- |
+ This import brings in the XML language definition |
+ --> |
+ <xs:import namespace="http://www.w3.org/XML/1998/namespace" |
+ schemaLocation="xml.xsd"/> |
+ <!-- |
+ Communication Diversion Information. This is the top-level XML element |
+ --> |
+ <xs:element name="comm-div-info" |
+ type="comm-div-info-type" /> |
+ <!-- |
+ Communication Diversion Information Type. This is the top-level XML element |
+ --> |
+ <xs:complexType name="comm-div-info-type"> |
+ <xs:sequence> |
+ <xs:element name="comm-div-subs-info" |
+ type="comm-div-subs-info-type" minOccurs="0" /> |
+ <xs:element name="comm-div-ntfy-info" |
+ type="comm-div-ntfy-info-type" minOccurs="0" /> |
+ <xs:any namespace="##other" processContents="lax" |
+ minOccurs="0" maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ <xs:attribute name="entity" type="xs:anyURI" |
+ use="required"/> |
+ </xs:complexType> |
+ <!--- |
+ Communication Diversion Subscription Type. |
+ Used at Subscription time to |
+ select Communication Diversions for notification, |
+ when to notify them and |
+ what to notify. |
+ --> |
+ <xs:complexType name="comm-div-subs-info-type"> |
+ <xs:sequence> |
+ <xs:element name="comm-div-selection-criteria" |
+ type="comm-div-selection-criteria-type" |
+ minOccurs="0" /> |
+ <xs:element name="comm-div-ntfy-trigger-criteria" |
+ type="comm-div-ntfy-trigger-criteria-type" |
+ minOccurs="0" /> |
+ <xs:element name="comm-div-info-selection-criteria" |
+ type="comm-div-info-selection-criteria-type" |
+ minOccurs="0" /> |
+ <xs:any namespace="##other" processContents="lax" |
+ minOccurs="0" maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ <xs:anyAttribute namespace="##other" processContents="lax"/> |
+ </xs:complexType> |
+ <!--- |
+ Communication Diversion Notification Information Type |
+ Used while notifying the User about the Communication Diversion |
+ --> |
+ <xs:complexType name="comm-div-ntfy-info-type"> |
+ <xs:sequence> |
+ <xs:element name="originating-user-info" |
+ type="user-info-type" minOccurs="0" /> |
+ <xs:element name="diverting-user-info" |
+ type="xs:anyURI" minOccurs="0" /> |
+ <xs:element name="diverted-to-user-info" |
+ type="xs:anyURI" minOccurs="0" /> |
+ <xs:element name="diversion-time-info" |
+ type="xs:dateTime" minOccurs="0" /> |
+ <xs:element name="diversion-reason-info" |
+ type="diversion-reason-info-type" minOccurs="0" /> |
+ <xs:element name="diversion-rule-info" |
+ type="diversion-rule-info-type" minOccurs="0" /> |
+ <xs:any namespace="##other" processContents="lax" |
+ minOccurs="0" maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ <xs:anyAttribute namespace="##other" processContents="lax"/> |
+ </xs:complexType> |
+ <!-- |
+ COMMUNICATION DIVERSION SELECTION CRITERIA |
+ --> |
+ <xs:complexType name="comm-div-selection-criteria-type"> |
+ <xs:sequence> |
+ <xs:element name="originating-user-selection-criteria" |
+ type="user-selection-criteria-type" |
+ minOccurs="0" /> |
+ <xs:element name="diverting-user-selection-criteria" |
+ type="xs:anyURI" |
+ minOccurs="0" /> |
+ <xs:element name="diverted-to-user-selection-criteria" |
+ type="xs:anyURI" |
+ minOccurs="0" /> |
+ <xs:element name="diversion-time-selection-criteria" |
+ type="time-range-selection-criteria-type" |
+ minOccurs="0" /> |
+ <xs:element name="diversion-reason-selection-criteria" |
+ type="diversion-reason-selection-criteria-type" |
+ minOccurs="0" /> |
+ <xs:any namespace="##other" processContents="lax" |
+ minOccurs="0" maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ <xs:anyAttribute namespace="##other" processContents="lax"/> |
+ </xs:complexType> |
+ <!-- |
+ COMMUNICATION DIVERSION NOTIFICATION TRIGGER CRITERIA |
+ --> |
+ <xs:complexType name="comm-div-ntfy-trigger-criteria-type"> |
+ <xs:sequence> |
+ <xs:element name="notification-time-selection-criteria" |
+ type="time-range-selection-criteria-type" |
+ minOccurs="0" /> |
+ <xs:element name="presence-status-selection-criteria" |
+ type="presence-status-selection-criteria-type" |
+ minOccurs="0" /> |
+ <xs:element name="notification-buffer-interval" minOccurs="0" default="86400"> |
+ <xs:simpleType> |
+ <xs:restriction base="xs:integer"> |
+ <xs:maxInclusive value="86400"/> |
+ </xs:restriction> |
+ </xs:simpleType> |
+ </xs:element> |
+ <xs:any namespace="##other" processContents="lax" |
+ minOccurs="0" maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ <xs:anyAttribute namespace="##other" processContents="lax"/> |
+ </xs:complexType> |
+ <!-- |
+ COMMUNICATION DIVERSION INFORMATION SELECTION CRITERIA |
+ --> |
+ <xs:complexType name="comm-div-info-selection-criteria-type"> |
+ <xs:sequence> |
+ <xs:element name="disable-originating-user-info" |
+ type="xs:boolean" default="false" minOccurs="0" /> |
+ <xs:element name="disable-diverting-user-info" |
+ type="xs:boolean" default="false" minOccurs="0" /> |
+ <xs:element name="disable-diverted-to-user-info" |
+ type="xs:boolean" default="false" minOccurs="0" /> |
+ <xs:element name="disable-diversion-time-info" |
+ type="xs:boolean" default="false" minOccurs="0" /> |
+ <xs:element name="disable-diversion-reason-info" |
+ type="xs:boolean" default="false" minOccurs="0" /> |
+ <xs:element name="disable-diversion-rule-info" |
+ type="xs:boolean" default="false" minOccurs="0" /> |
+ <xs:any namespace="##other" processContents="lax" |
+ minOccurs="0" maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ <xs:anyAttribute namespace="##other" processContents="lax"/> |
+ </xs:complexType> |
+ |
+ <!-- User Info Type --> |
+ <xs:complexType name="user-info-type"> |
+ <xs:sequence> |
+ <xs:element name="user-name" type="xs:string" minOccurs="0" maxOccurs="1"/> |
+ <xs:element name="user-URI" type="xs:anyURI"/> |
+ </xs:sequence> |
+ <xs:anyAttribute namespace="##other" processContents="lax"/> |
+ </xs:complexType> |
+ |
+ <!-- |
+ DIVERSION REASON INFO |
+ --> |
+ |
+ <xs:simpleType name="diversion-reason-info-types"> |
+ <xs:list itemType="diversion-reason-info-type"/> |
+ </xs:simpleType> |
+ <xs:simpleType name="diversion-reason-info-type"> |
+ <xs:restriction base="xs:integer"> |
+ <xs:enumeration value="404"/> |
+ <xs:enumeration value="486"/> |
+ <xs:enumeration value="408"/> |
+ <xs:enumeration value="302"/> |
+ <xs:enumeration value="487"/> |
+ <xs:enumeration value="480"/> |
+ <xs:enumeration value="503"/> |
+ </xs:restriction> |
+ </xs:simpleType> |
+ <!-- |
+ DIVERSION RULE INFO |
+ --> |
+ <xs:complexType name="diversion-rule-info-type"> |
+ <xs:sequence> |
+ <xs:element name="diversion-rule" type="xs:string"/> |
+ </xs:sequence> |
+ <xs:anyAttribute namespace="##other" processContents="lax"/> |
+ </xs:complexType> |
+ <!-- |
+ ORIGINATING USER SELECTION CRITERIA |
+ --> |
+ <xs:complexType name="user-selection-criteria-type"> |
+ <xs:sequence> |
+ <xs:element name="user-info" |
+ type="user-info-type" minOccurs="0" |
+ maxOccurs="unbounded" /> |
+ </xs:sequence> |
+ <xs:anyAttribute namespace="##other" processContents="lax"/> |
+ </xs:complexType> |
+ <!-- |
+ DIVERSION REASON SELECTION CRITERIA |
+ --> |
+ <xs:complexType name="diversion-reason-selection-criteria-type"> |
+ <xs:sequence> |
+ <xs:element name="diversion-reason-info" |
+ type="diversion-reason-info-types"/> |
+ </xs:sequence> |
+ <xs:anyAttribute namespace="##other" processContents="lax"/> |
+ </xs:complexType> |
+ <!-- |
+ TIME RANGE SELECTION CRITERIA |
+ --> |
+ <xs:complexType name="time-range-selection-criteria-type"> |
+ <xs:sequence> |
+ <xs:element name="time-range" |
+ type="time-range-type" minOccurs="0" |
+ maxOccurs="unbounded" /> |
+ </xs:sequence> |
+ <xs:anyAttribute namespace="##other" processContents="lax"/> |
+ </xs:complexType> |
+ <!-- |
+ TIME RANGE INFO |
+ --> |
+ <xs:complexType name="time-range-type"> |
+ <xs:sequence> |
+ <xs:element name="start-time" type="xs:dateTime" /> |
+ <xs:element name="end-time" type="xs:dateTime" /> |
+ </xs:sequence> |
+ <xs:anyAttribute namespace="##other" processContents="lax"/> |
+ </xs:complexType> |
+ <!-- |
+ PRESENCE STATUS SELECTION CRITERIA |
+ --> |
+ <xs:complexType name="presence-status-selection-criteria-type"> |
+ <xs:sequence> |
+ <xs:element name="presence-status-info" |
+ type="presence-status-info-type" minOccurs="0" |
+ maxOccurs="unbounded" /> |
+ </xs:sequence> |
+ <xs:anyAttribute namespace="##other" processContents="lax"/> |
+ </xs:complexType> |
+ <!-- |
+ PRESENCE STATUS INFo |
+ --> |
+ <xs:complexType name="presence-status-info-type"> |
+ <xs:sequence> |
+ <xs:element name="presence-status" type="xs:string" /> |
+ </xs:sequence> |
+ <xs:anyAttribute namespace="##other" processContents="lax"/> |
+ </xs:complexType> |
+</xs:schema> |
\ No newline at end of file |
/v2.0.0/xsd/CDIVN.xsd |
---|
Property changes: |
Added: svn:keywords |
## -0,0 +1 ## |
+LastChangedDate |
\ No newline at end of property |
Index: v2.0.0/xsd/CONF.xsd |
=================================================================== |
--- v2.0.0/xsd/CONF.xsd (nonexistent) |
+++ v2.0.0/xsd/CONF.xsd (revision 552) |
@@ -0,0 +1,387 @@ |
+<?xml version="1.0" encoding="UTF-8" ?> |
+ <xs:schema |
+ targetNamespace="urn:ietf:params:xml:ns:conference-info" |
+ xmlns:tns="urn:ietf:params:xml:ns:conference-info" |
+ xmlns:xs="http://www.w3.org/2001/XMLSchema" |
+ xmlns="urn:ietf:params:xml:ns:conference-info" |
+ elementFormDefault="qualified" |
+ attributeFormDefault="unqualified"> |
+ <!-- |
+ This imports the xml:language definition |
+ --> |
+ <xs:import namespace="http://www.w3.org/XML/1998/namespace" |
+ schemaLocation="xml.xsd"/> |
+ <!-- |
+ CONFERENCE ELEMENT |
+ --> |
+ <xs:element name="conference-info" type="conference-type"/> |
+ <!-- |
+ CONFERENCE TYPE |
+ --> |
+ <xs:complexType name="conference-type"> |
+ <xs:sequence> |
+ <xs:element name="conference-description" |
+ type="conference-description-type" minOccurs="0"/> |
+ <xs:element name="host-info" |
+ type="host-type" minOccurs="0"/> |
+ <xs:element name="conference-state" |
+ type="conference-state-type" minOccurs="0"/> |
+ <xs:element name="users" |
+ type="users-type" minOccurs="0"/> |
+ <xs:element name="sidebars-by-ref" |
+ type="uris-type" minOccurs="0"/> |
+ <xs:element name="sidebars-by-val" |
+ type="sidebars-by-val-type" minOccurs="0"/> |
+ <xs:any namespace="##other" processContents="lax" |
+ minOccurs="0" maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ <xs:attribute name="entity" |
+ type="xs:anyURI" use="required"/> |
+ <xs:attribute name="state" |
+ type="state-type" use="optional" default="full"/> |
+ <xs:attribute name="version" |
+ type="xs:unsignedInt" use="optional"/> |
+ <xs:anyAttribute namespace="##other" processContents="lax"/> |
+ </xs:complexType> |
+ <!-- |
+ STATE TYPE |
+ --> |
+ <xs:simpleType name="state-type"> |
+ <xs:restriction base="xs:string"> |
+ <xs:enumeration value="full"/> |
+ <xs:enumeration value="partial"/> |
+ <xs:enumeration value="deleted"/> |
+ </xs:restriction> |
+ </xs:simpleType> |
+ <!-- |
+ CONFERENCE DESCRIPTION TYPE |
+ --> |
+ <xs:complexType name="conference-description-type"> |
+ <xs:sequence> |
+ <xs:element name="display-text" |
+ type="xs:string" minOccurs="0"/> |
+ <xs:element name="subject" |
+ type="xs:string" minOccurs="0"/> |
+ <xs:element name="free-text" |
+ type="xs:string" minOccurs="0"/> |
+ <xs:element name="keywords" |
+ type="keywords-type" minOccurs="0"/> |
+ <xs:element name="conf-uris" |
+ type="uris-type" minOccurs="0"/> |
+ <xs:element name="service-uris" |
+ type="uris-type" minOccurs="0"/> |
+ <xs:element name="maximum-user-count" |
+ type="xs:unsignedInt" minOccurs="0"/> |
+ <xs:element name="available-media" |
+ type="conference-media-type" minOccurs="0"/> |
+ <xs:any namespace="##other" processContents="lax" |
+ minOccurs="0" maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ <xs:anyAttribute namespace="##other" processContents="lax"/> |
+ </xs:complexType> |
+ <!-- |
+ HOST TYPE |
+ --> |
+ <xs:complexType name="host-type"> |
+ <xs:sequence> |
+ <xs:element name="display-text" type="xs:string" |
+ minOccurs="0"/> |
+ <xs:element name="web-page" type="xs:anyURI" |
+ minOccurs="0"/> |
+ <xs:element name="uris" type="uris-type" |
+ minOccurs="0"/> |
+ <xs:any namespace="##other" processContents="lax" |
+ minOccurs="0" maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ <xs:anyAttribute namespace="##other" processContents="lax"/> |
+ </xs:complexType> |
+ <!-- |
+ CONFERENCE STATE TYPE |
+ --> |
+ <xs:complexType name="conference-state-type"> |
+ <xs:sequence> |
+ <xs:element name="user-count" type="xs:unsignedInt" |
+ minOccurs="0"/> |
+ <xs:element name="active" type="xs:boolean" |
+ minOccurs="0"/> |
+ <xs:element name="locked" type="xs:boolean" |
+ minOccurs="0"/> |
+ <xs:any namespace="##other" processContents="lax" |
+ minOccurs="0" maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ <xs:anyAttribute namespace="##other" processContents="lax"/> |
+ </xs:complexType> |
+ <!-- |
+ CONFERENCE MEDIA TYPE |
+ --> |
+ <xs:complexType name="conference-media-type"> |
+ <xs:sequence> |
+ <xs:element name="entry" type="conference-medium-type" |
+ maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ <xs:anyAttribute namespace="##other" processContents="lax"/> |
+ </xs:complexType> |
+ <!-- |
+ CONFERENCE MEDIUM TYPE |
+ --> |
+ <xs:complexType name="conference-medium-type"> |
+ <xs:sequence> |
+ <xs:element name="display-text" type="xs:string" |
+ minOccurs="0"/> |
+ <xs:element name="type" type="xs:string"/> |
+ <xs:element name="status" type="media-status-type" |
+ minOccurs="0"/> |
+ <xs:any namespace="##other" processContents="lax" |
+ minOccurs="0" maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ <xs:attribute name="label" type="xs:string" |
+ use="required"/> |
+ <xs:anyAttribute namespace="##other" processContents="lax"/> |
+ </xs:complexType> |
+ <!-- |
+ URIs TYPE |
+ --> |
+ <xs:complexType name="uris-type"> |
+ <xs:sequence> |
+ <xs:element name="entry" type="uri-type" |
+ maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ <xs:attribute name="state" type="state-type" |
+ use="optional" default="full"/> |
+ <xs:anyAttribute namespace="##other" processContents="lax"/> |
+ </xs:complexType> |
+ <!-- |
+ URI TYPE |
+ --> |
+ <xs:complexType name="uri-type"> |
+ <xs:sequence> |
+ <xs:element name="uri" type="xs:anyURI"/> |
+ <xs:element name="display-text" type="xs:string" |
+ minOccurs="0"/> |
+ <xs:element name="purpose" type="xs:string" |
+ minOccurs="0"/> |
+ <xs:element name="modified" type="execution-type" |
+ minOccurs="0"/> |
+ <xs:any namespace="##other" processContents="lax" |
+ minOccurs="0" maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ <xs:anyAttribute namespace="##other" processContents="lax"/> |
+ </xs:complexType> |
+ <!-- |
+ KEYWORDS TYPE |
+ --> |
+ <xs:simpleType name="keywords-type"> |
+ <xs:list itemType="xs:string"/> |
+ </xs:simpleType> |
+ <!-- |
+ USERS TYPE |
+ --> |
+ <xs:complexType name="users-type"> |
+ <xs:sequence> |
+ <xs:element name="user" type="user-type" |
+ minOccurs="0" maxOccurs="unbounded"/> |
+ <xs:any namespace="##other" processContents="lax" |
+ minOccurs="0" maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ <xs:attribute name="state" type="state-type" |
+ use="optional" default="full"/> |
+ <xs:anyAttribute namespace="##other" processContents="lax"/> |
+ </xs:complexType> |
+ <!-- |
+ USER TYPE |
+ --> |
+ <xs:complexType name="user-type"> |
+ <xs:sequence> |
+ <xs:element name="display-text" type="xs:string" |
+ minOccurs="0"/> |
+ <xs:element name="associated-aors" type="uris-type" |
+ minOccurs="0"/> |
+ <xs:element name="roles" type="user-roles-type" |
+ minOccurs="0"/> |
+ <xs:element name="languages" type="user-languages-type" |
+ minOccurs="0"/> |
+ <xs:element name="cascaded-focus" type="xs:anyURI" |
+ minOccurs="0"/> |
+ <xs:element name="endpoint" type="endpoint-type" |
+ minOccurs="0" maxOccurs="unbounded"/> |
+ <xs:any namespace="##other" processContents="lax" |
+ minOccurs="0" maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ <xs:attribute name="entity" type="xs:anyURI"/> |
+ <xs:attribute name="state" type="state-type" |
+ use="optional" default="full"/> |
+ <xs:anyAttribute namespace="##other" processContents="lax"/> |
+ </xs:complexType> |
+ <!-- |
+ USER ROLES TYPE |
+ --> |
+ <xs:complexType name="user-roles-type"> |
+ <xs:sequence> |
+ <xs:element name="entry" type="xs:string" |
+ maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ <xs:anyAttribute namespace="##other" processContents="lax"/> |
+ </xs:complexType> |
+ <!-- |
+ USER LANGUAGES TYPE |
+ --> |
+ <xs:simpleType name="user-languages-type"> |
+ <xs:list itemType="xs:language"/> |
+ </xs:simpleType> |
+ <!-- |
+ ENDPOINT TYPE |
+ --> |
+ <xs:complexType name="endpoint-type"> |
+ <xs:sequence> |
+ <xs:element name="display-text" type="xs:string" |
+ minOccurs="0"/> |
+ <xs:element name="referred" type="execution-type" |
+ minOccurs="0"/> |
+ <xs:element name="status" type="endpoint-status-type" |
+ minOccurs="0"/> |
+ <xs:element name="joining-method" type="joining-type" |
+ minOccurs="0"/> |
+ <xs:element name="joining-info" |
+ type="execution-type" |
+ minOccurs="0"/> |
+ <xs:element name="disconnection-method" |
+ type="disconnection-type" |
+ minOccurs="0"/> |
+ <xs:element name="disconnection-info" |
+ type="execution-type" |
+ minOccurs="0"/> |
+ <xs:element name="media" type="media-type" |
+ minOccurs="0" maxOccurs="unbounded"/> |
+ <xs:element name="call-info" type="call-type" |
+ minOccurs="0"/> |
+ <xs:any namespace="##other" processContents="lax" |
+ minOccurs="0" maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ <xs:attribute name="entity" type="xs:string"/> |
+ <xs:attribute name="state" type="state-type" |
+ use="optional" default="full"/> |
+ <xs:anyAttribute namespace="##other" processContents="lax"/> |
+ </xs:complexType> |
+ <!-- |
+ ENDPOINT STATUS TYPE |
+ --> |
+ <xs:simpleType name="endpoint-status-type"> |
+ <xs:restriction base="xs:string"> |
+ <xs:enumeration value="pending"/> |
+ <xs:enumeration value="dialing-out"/> |
+ <xs:enumeration value="dialing-in"/> |
+ <xs:enumeration value="alerting"/> |
+ <xs:enumeration value="on-hold"/> |
+ <xs:enumeration value="connected"/> |
+ <xs:enumeration value="muted-via-focus"/> |
+ <xs:enumeration value="disconnecting"/> |
+ <xs:enumeration value="disconnected"/> |
+ </xs:restriction> |
+ </xs:simpleType> |
+ <!-- |
+ JOINING TYPE |
+ --> |
+ <xs:simpleType name="joining-type"> |
+ <xs:restriction base="xs:string"> |
+ <xs:enumeration value="dialed-in"/> |
+ <xs:enumeration value="dialed-out"/> |
+ <xs:enumeration value="focus-owner"/> |
+ </xs:restriction> |
+ </xs:simpleType> |
+ <!-- |
+ DISCONNECTION TYPE |
+ --> |
+ <xs:simpleType name="disconnection-type"> |
+ <xs:restriction base="xs:string"> |
+ <xs:enumeration value="departed"/> |
+ <xs:enumeration value="booted"/> |
+ <xs:enumeration value="failed"/> |
+ <xs:enumeration value="busy"/> |
+ </xs:restriction> |
+ </xs:simpleType> |
+ <!-- |
+ EXECUTION TYPE |
+ --> |
+ <xs:complexType name="execution-type"> |
+ <xs:sequence> |
+ <xs:element name="when" type="xs:dateTime" |
+ minOccurs="0"/> |
+ <xs:element name="reason" type="xs:string" |
+ minOccurs="0"/> |
+ <xs:element name="by" type="xs:anyURI" |
+ minOccurs="0"/> |
+ </xs:sequence> |
+ <xs:anyAttribute namespace="##other" processContents="lax"/> |
+ </xs:complexType> |
+ <!-- |
+ CALL TYPE |
+ --> |
+ <xs:complexType name="call-type"> |
+ <xs:choice> |
+ <xs:element name="sip" type="sip-dialog-id-type"/> |
+ <xs:any namespace="##other" processContents="lax" |
+ minOccurs="0" maxOccurs="unbounded"/> |
+ </xs:choice> |
+ <xs:anyAttribute namespace="##other" processContents="lax"/> |
+ </xs:complexType> |
+ <!-- |
+ SIP DIALOG ID TYPE |
+ --> |
+ <xs:complexType name="sip-dialog-id-type"> |
+ <xs:sequence> |
+ <xs:element name="display-text" type="xs:string" |
+ minOccurs="0"/> |
+ <xs:element name="call-id" type="xs:string"/> |
+ <xs:element name="from-tag" type="xs:string"/> |
+ <xs:element name="to-tag" type="xs:string"/> |
+ <xs:any namespace="##other" processContents="lax" |
+ minOccurs="0" maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ <xs:anyAttribute namespace="##other" processContents="lax"/> |
+ </xs:complexType> |
+ <!-- |
+ MEDIA TYPE |
+ --> |
+ <xs:complexType name="media-type"> |
+ <xs:sequence> |
+ <xs:element name="display-text" type="xs:string" |
+ minOccurs="0"/> |
+ <xs:element name="type" type="xs:string" |
+ minOccurs="0"/> |
+ <xs:element name="label" type="xs:string" |
+ minOccurs="0"/> |
+ <xs:element name="src-id" type="xs:string" |
+ minOccurs="0"/> |
+ <xs:element name="status" type="media-status-type" |
+ minOccurs="0"/> |
+ <xs:any namespace="##other" processContents="lax" |
+ minOccurs="0" maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ <xs:attribute name="id" type="xs:string" |
+ use="required"/> |
+ <xs:anyAttribute namespace="##other" processContents="lax"/> |
+ </xs:complexType> |
+ <!-- |
+ MEDIA STATUS TYPE |
+ --> |
+ <xs:simpleType name="media-status-type"> |
+ <xs:restriction base="xs:string"> |
+ <xs:enumeration value="recvonly"/> |
+ <xs:enumeration value="sendonly"/> |
+ <xs:enumeration value="sendrecv"/> |
+ <xs:enumeration value="inactive"/> |
+ </xs:restriction> |
+ </xs:simpleType> |
+ <!-- |
+ SIDEBARS BY VAL TYPE |
+ --> |
+ <xs:complexType name="sidebars-by-val-type"> |
+ <xs:sequence> |
+ <xs:element name="entry" type="conference-type" |
+ minOccurs="0" maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ <xs:attribute name="state" type="state-type" |
+ use="optional" default="full"/> |
+ <xs:anyAttribute namespace="##other" processContents="lax"/> |
+ </xs:complexType> |
+ </xs:schema> |
/v2.0.0/xsd/CONF.xsd |
---|
Property changes: |
Added: svn:keywords |
## -0,0 +1 ## |
+LastChangedDate |
\ No newline at end of property |
Index: v2.0.0/xsd/ResourceList.xsd |
=================================================================== |
--- v2.0.0/xsd/ResourceList.xsd (nonexistent) |
+++ v2.0.0/xsd/ResourceList.xsd (revision 552) |
@@ -0,0 +1,70 @@ |
+<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
+<xs:schema xmlns="urn:ietf:params:xml:ns:resource-lists" xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="urn:ietf:params:xml:ns:resource-lists"> |
+ <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="xml.xsd"/> |
+ <xs:complexType name="listType"> |
+ <xs:sequence> |
+ <xs:element minOccurs="0" name="display-name" type="display-nameType"/> |
+ <xs:sequence maxOccurs="unbounded" minOccurs="0"> |
+ <xs:choice> |
+ <xs:element name="list"> |
+ <xs:complexType> |
+ <xs:complexContent> |
+ <xs:extension base="listType"/> |
+ </xs:complexContent> |
+ </xs:complexType> |
+ </xs:element> |
+ <xs:element name="external" type="externalType"/> |
+ <xs:element name="entry" type="entryType"/> |
+ <xs:element name="entry-ref" type="entry-refType"/> |
+ </xs:choice> |
+ </xs:sequence> |
+ <xs:any maxOccurs="unbounded" minOccurs="0" namespace="##other" processContents="lax"/> |
+ </xs:sequence> |
+ <xs:attribute name="name" type="xs:string" use="optional"/> |
+ <xs:anyAttribute namespace="##other" processContents="lax"/> |
+ </xs:complexType> |
+ <xs:complexType name="entryType"> |
+ <xs:sequence> |
+ <xs:element minOccurs="0" name="display-name"> |
+ <xs:complexType> |
+ <xs:simpleContent> |
+ <xs:extension base="display-nameType"/> |
+ </xs:simpleContent> |
+ </xs:complexType> |
+ </xs:element> |
+ <xs:any maxOccurs="unbounded" minOccurs="0" namespace="##other" processContents="lax"/> |
+ </xs:sequence> |
+ <xs:attribute name="uri" type="xs:anyURI" use="required"/> |
+ <xs:anyAttribute namespace="##other" processContents="lax"/> |
+ </xs:complexType> |
+ <xs:complexType name="entry-refType"> |
+ <xs:sequence> |
+ <xs:element minOccurs="0" name="display-name" type="display-nameType"/> |
+ <xs:any maxOccurs="unbounded" minOccurs="0" namespace="##other" processContents="lax"/> |
+ </xs:sequence> |
+ <xs:attribute name="ref" type="xs:anyURI" use="required"/> |
+ <xs:anyAttribute namespace="##other" processContents="lax"/> |
+ </xs:complexType> |
+ <xs:complexType name="externalType"> |
+ <xs:sequence> |
+ <xs:element minOccurs="0" name="display-name" type="display-nameType"/> |
+ <xs:any maxOccurs="unbounded" minOccurs="0" namespace="##other" processContents="lax"/> |
+ </xs:sequence> |
+ <xs:attribute name="anchor" type="xs:anyURI"/> |
+ <xs:anyAttribute namespace="##other" processContents="lax"/> |
+ </xs:complexType> |
+ <xs:element name="resource-lists"> |
+ <xs:complexType> |
+ <xs:sequence maxOccurs="unbounded" minOccurs="0"> |
+ <xs:element name="list" type="listType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ </xs:element> |
+ <xs:complexType name="display-nameType"> |
+ <xs:simpleContent> |
+ <xs:extension base="xs:string"> |
+ <xs:attribute ref="xml:lang"/> |
+ </xs:extension> |
+ </xs:simpleContent> |
+ </xs:complexType> |
+ </xs:schema> |
/v2.0.0/xsd/ResourceList.xsd |
---|
Property changes: |
Added: svn:keywords |
## -0,0 +1 ## |
+LastChangedDate |
\ No newline at end of property |
Index: v2.0.0/xsd/geopriv10basic.xsd |
=================================================================== |
--- v2.0.0/xsd/geopriv10basic.xsd (nonexistent) |
+++ v2.0.0/xsd/geopriv10basic.xsd (revision 552) |
@@ -0,0 +1,35 @@ |
+<xs:schema |
+ targetNamespace="urn:ietf:params:xml:ns:pidf:geopriv10:basicPolicy" |
+ xmlns:tns="urn:ietf:params:xml:ns:pidf:geopriv10:basicPolicy" |
+ xmlns:xs="http://www.w3.org/2001/XMLSchema" |
+ elementFormDefault="qualified" attributeFormDefault="unqualified"> |
+ |
+ <!-- This import brings in the XML language attribute xml:lang--> |
+ <xs:import namespace="http://www.w3.org/XML/1998/namespace" |
+ schemaLocation="xml.xsd"/> |
+ |
+ <xs:complexType name="locPolicyType"> |
+ <xs:sequence> |
+ <xs:element name="retransmission-allowed" type="xs:boolean" |
+ minOccurs="0" maxOccurs="1"/> |
+ <xs:element name="retention-expiry" type="xs:dateTime" |
+ minOccurs="0" maxOccurs="1"/> |
+ <xs:element name="external-ruleset" type="xs:anyURI" |
+ minOccurs="0" maxOccurs="1"/> |
+ <xs:element name="note-well" type="tns:notewell" |
+ minOccurs="0" maxOccurs="1"/> |
+ <xs:any namespace="##other" processContents="lax" minOccurs="0" |
+ maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ |
+ <xs:complexType name="notewell"> |
+ <xs:simpleContent> |
+ <xs:extension base="xs:string"> |
+ <xs:attribute ref="xml:lang" /> |
+ </xs:extension> |
+ </xs:simpleContent> |
+ </xs:complexType> |
+ |
+</xs:schema> |
+ |
Index: v2.0.0/xsd/pidf.xsd |
=================================================================== |
--- v2.0.0/xsd/pidf.xsd (nonexistent) |
+++ v2.0.0/xsd/pidf.xsd (revision 552) |
@@ -0,0 +1,92 @@ |
+ |
+ <xs:schema targetNamespace="urn:ietf:params:xml:ns:pidf" |
+ xmlns:tns="urn:ietf:params:xml:ns:pidf" |
+ xmlns:xs="http://www.w3.org/2001/XMLSchema" |
+ elementFormDefault="qualified" |
+ attributeFormDefault="unqualified"> |
+<!-- |
+ RFC 3863 |
+--> |
+ |
+ |
+ <!-- This import brings in the XML language attribute xml:lang--> |
+ <xs:import namespace="http://www.w3.org/XML/1998/namespace" |
+ schemaLocation="xml.xsd"/> |
+ |
+ <xs:element name="presence" type="tns:presence"/> |
+ |
+ <xs:complexType name="presence"> |
+ <xs:sequence> |
+ <xs:element name="tuple" type="tns:tuple" minOccurs="0" |
+ maxOccurs="unbounded"/> |
+ <xs:element name="note" type="tns:note" minOccurs="0" |
+ maxOccurs="unbounded"/> |
+ <xs:any namespace="##other" processContents="lax" minOccurs="0" |
+ maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ <xs:attribute name="entity" type="xs:anyURI" use="required"/> |
+ </xs:complexType> |
+ |
+ <xs:complexType name="tuple"> |
+ <xs:sequence> |
+ <xs:element name="status" type="tns:status"/> |
+ <xs:any namespace="##other" processContents="lax" minOccurs="0" |
+ maxOccurs="unbounded"/> |
+ <xs:element name="contact" type="tns:contact" minOccurs="0"/> |
+ <xs:element name="note" type="tns:note" minOccurs="0" |
+ maxOccurs="unbounded"/> |
+ <xs:element name="timestamp" type="xs:dateTime" minOccurs="0"/> |
+ </xs:sequence> |
+ <xs:attribute name="id" type="xs:ID" use="required"/> |
+ </xs:complexType> |
+ |
+ <xs:complexType name="status"> |
+ <xs:sequence> |
+ <xs:element name="basic" type="tns:basic" minOccurs="0"/> |
+ <xs:any namespace="##other" processContents="lax" minOccurs="0" |
+ maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:simpleType name="basic"> |
+ <xs:restriction base="xs:string"> |
+ <xs:enumeration value="open"/> |
+ <xs:enumeration value="closed"/> |
+ </xs:restriction> |
+ </xs:simpleType> |
+ |
+ <xs:complexType name="contact"> |
+ <xs:simpleContent> |
+ <xs:extension base="xs:anyURI"> |
+ <xs:attribute name="priority" type="tns:qvalue"/> |
+ </xs:extension> |
+ </xs:simpleContent> |
+ </xs:complexType> |
+ |
+ <xs:complexType name="note"> |
+ <xs:simpleContent> |
+ <xs:extension base="xs:string"> |
+ <xs:attribute ref="xml:lang"/> |
+ </xs:extension> |
+ </xs:simpleContent> |
+ </xs:complexType> |
+ |
+ <xs:simpleType name="qvalue"> |
+ <xs:restriction base="xs:decimal"> |
+ <xs:pattern value="0(.[0-9]{0,3})?"/> |
+ <xs:pattern value="1(.0{0,3})?"/> |
+ </xs:restriction> |
+ </xs:simpleType> |
+ |
+ <!-- Global Attributes --> |
+ <xs:attribute name="mustUnderstand" type="xs:boolean" default="0"> |
+ <xs:annotation> |
+ <xs:documentation> |
+ This attribute may be used on any element within an optional |
+ PIDF extension to indicate that the corresponding element must |
+ be understood by the PIDF processor if the enclosing optional |
+ element is to be handled. |
+ </xs:documentation> |
+ </xs:annotation> |
+ </xs:attribute> |
+ </xs:schema> |
+ |
Index: v2.0.0/xsd/pidf_lo.xsd |
=================================================================== |
--- v2.0.0/xsd/pidf_lo.xsd (nonexistent) |
+++ v2.0.0/xsd/pidf_lo.xsd (revision 552) |
@@ -0,0 +1,57 @@ |
+ <xs:schema |
+ targetNamespace="urn:ietf:params:xml:ns:pidf:geopriv10" |
+ xmlns:tns="urn:ietf:params:xml:ns:pidf:geopriv10" |
+ xmlns:gbp="urn:ietf:params:xml:ns:pidf:geopriv10:basicPolicy" |
+ xmlns:xs="http://www.w3.org/2001/XMLSchema" |
+ elementFormDefault="qualified" attributeFormDefault="unqualified"> |
+ |
+ <xs:import namespace= |
+ "urn:ietf:params:xml:ns:pidf:geopriv10:basicPolicy" |
+ schemaLocation="geopriv10basic.xsd"/> |
+ |
+ <!-- This import brings in the XML language attribute xml:lang--> |
+ |
+ <xs:import namespace="http://www.w3.org/XML/1998/namespace" |
+ schemaLocation="xml.xsd"/> |
+ |
+ <xs:element name="geopriv" type="tns:geopriv"/> |
+ |
+ <xs:complexType name="geopriv"> |
+ <xs:sequence> |
+ <xs:element name="location-info" type="tns:locInfoType" |
+ minOccurs="1" maxOccurs="1"/> |
+ <xs:element name="usage-rules" type="gbp:locPolicyType" |
+ minOccurs="1" maxOccurs="1"/> |
+ <xs:element name="method" type="tns:locMethod" |
+ minOccurs="0" maxOccurs="1"/> |
+ <xs:element name="provided-by" type="tns:locProvidedBy" |
+ minOccurs="0" maxOccurs="1"/> |
+ <xs:any namespace="##other" processContents="lax" minOccurs="0" |
+ maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ |
+ <xs:complexType name="locInfoType"> |
+ <xs:sequence> |
+ <xs:any namespace="##other" processContents="lax" minOccurs="0" |
+ maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ |
+ <xs:complexType name="locMethod"> |
+ <xs:simpleContent> |
+ <xs:extension base="xs:string"> |
+ <xs:attribute ref="xml:lang" /> |
+ </xs:extension> |
+ </xs:simpleContent> |
+ </xs:complexType> |
+ |
+ <xs:complexType name="locProvidedBy"> |
+ <xs:sequence> |
+ <xs:any namespace="##other" processContents="skip" |
+ minOccurs="1" maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ |
+ </xs:schema> |
+ |
Index: v2.0.0/xsd/regInfo.xsd |
=================================================================== |
--- v2.0.0/xsd/regInfo.xsd (nonexistent) |
+++ v2.0.0/xsd/regInfo.xsd (revision 552) |
@@ -0,0 +1,111 @@ |
+ |
+<xs:schema targetNamespace="urn:ietf:params:xml:ns:reginfo" |
+xmlns:tns="urn:ietf:params:xml:ns:reginfo" |
+xmlns:xs="http://www.w3.org/2001/XMLSchema" |
+elementFormDefault="qualified" attributeFormDefault="unqualified"> |
+<!-- |
+ RFC 3680 clause 5.4 |
+--> |
+ |
+ <!-- This import brings in the XML language attribute xml:lang--> |
+ <xs:import namespace="http://www.w3.org/XML/1998/namespace" |
+schemaLocation="xml.xsd"/> |
+ <xs:element name="reginfo"> |
+ <xs:complexType> |
+ <xs:sequence> |
+ <xs:element ref="tns:registration" minOccurs="0" |
+maxOccurs="unbounded"/> |
+ <xs:any namespace="##other" processContents="lax" minOccurs="0" |
+maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ <xs:attribute name="version" type="xs:nonNegativeInteger" |
+use="required"/> |
+ <xs:attribute name="state" use="required"> |
+ <xs:simpleType> |
+ <xs:restriction base="xs:string"> |
+ <xs:enumeration value="full"/> |
+ <xs:enumeration value="partial"/> |
+ </xs:restriction> |
+ </xs:simpleType> |
+ </xs:attribute> |
+ </xs:complexType> |
+ </xs:element> |
+ <xs:element name="registration"> |
+ <xs:complexType> |
+ <xs:sequence> |
+ <xs:element ref="tns:contact" minOccurs="0" maxOccurs="unbounded"/> |
+ <xs:any namespace="##other" processContents="lax" minOccurs="0" |
+maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ <xs:attribute name="aor" type="xs:anyURI" use="required"/> |
+ <xs:attribute name="id" type="xs:string" use="required"/> |
+ <xs:attribute name="state" use="required"> |
+ <xs:simpleType> |
+ <xs:restriction base="xs:string"> |
+ <xs:enumeration value="init"/> |
+ <xs:enumeration value="active"/> |
+ <xs:enumeration value="terminated"/> |
+ </xs:restriction> |
+ </xs:simpleType> |
+ </xs:attribute> |
+ </xs:complexType> |
+ </xs:element> |
+ <xs:element name="contact"> |
+ <xs:complexType> |
+ <xs:sequence> |
+ <xs:element name="uri" type="xs:anyURI"/> |
+ <xs:element name="display-name" minOccurs="0"> |
+ <xs:complexType> |
+ <xs:simpleContent> |
+ <xs:extension base="xs:string"> |
+ <xs:attribute ref="xml:lang" use="optional"/> |
+ </xs:extension> |
+ </xs:simpleContent> |
+ </xs:complexType> |
+ </xs:element> |
+ <xs:element name="unknown-param" minOccurs="0" |
+maxOccurs="unbounded"> |
+ <xs:complexType> |
+ <xs:simpleContent> |
+ <xs:extension base="xs:string"> |
+ <xs:attribute name="name" type="xs:string" use="required"/> |
+ </xs:extension> |
+ </xs:simpleContent> |
+ </xs:complexType> |
+ </xs:element> |
+ <xs:any namespace="##other" processContents="lax" minOccurs="0" |
+maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ <xs:attribute name="state" use="required"> |
+ <xs:simpleType> |
+ <xs:restriction base="xs:string"> |
+ <xs:enumeration value="active"/> |
+ <xs:enumeration value="terminated"/> |
+ </xs:restriction> |
+ </xs:simpleType> |
+ </xs:attribute> |
+ <xs:attribute name="event" use="required"> |
+ <xs:simpleType> |
+ <xs:restriction base="xs:string"> |
+ <xs:enumeration value="registered"/> |
+ <xs:enumeration value="created"/> |
+ <xs:enumeration value="refreshed"/> |
+ <xs:enumeration value="shortened"/> |
+ <xs:enumeration value="expired"/> |
+ <xs:enumeration value="deactivated"/> |
+ <xs:enumeration value="probation"/> |
+ <xs:enumeration value="unregistered"/> |
+ <xs:enumeration value="rejected"/> |
+ </xs:restriction> |
+ </xs:simpleType> |
+ </xs:attribute> |
+ <xs:attribute name="duration-registered" type="xs:unsignedLong"/> |
+ <xs:attribute name="expires" type="xs:unsignedLong"/> |
+ <xs:attribute name="retry-after" type="xs:unsignedLong"/> |
+ <xs:attribute name="id" type="xs:string" use="required"/> |
+ <xs:attribute name="q" type="xs:string"/> |
+ <xs:attribute name="callid" type="xs:string"/> |
+ <xs:attribute name="cseq" type="xs:unsignedLong"/> |
+ </xs:complexType> |
+ </xs:element> |
+</xs:schema> |
Index: v2.0.0/xsd/NoTargetNamespace.ttcn3view |
=================================================================== |
--- v2.0.0/xsd/NoTargetNamespace.ttcn3view (nonexistent) |
+++ v2.0.0/xsd/NoTargetNamespace.ttcn3view (revision 552) |
@@ -0,0 +1,62 @@ |
+module NoTargetNamespace { |
+ import from XSDAUX language "TTCN-3:2010" all; |
+ |
+ type record Initial_registration { |
+ } |
+ |
+ type record Emergency { |
+ } |
+ |
+ type TAction Action; |
+ |
+ type record Emergency_registration { |
+ } |
+ |
+ type record TType { |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ record of anytype elem_list optional |
+ } |
+ |
+ type TIMS3GPP Ims_3gpp; |
+ |
+ type record TAction { |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ record of anytype elem_list optional |
+ } |
+ |
+ type record TAlternativeService { |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ TType type_, |
+ XSDAUX.string reason, |
+ record of anytype elem_list optional |
+ } |
+ |
+ type record Restoration { |
+ } |
+ |
+ type record TIMS3GPP { |
+ XSDAUX.decimal version, |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ union { |
+ TAlternativeService alternative_service, |
+ XSDAUX.string service_info |
+ } choice, |
+ record of anytype elem_list optional |
+ } |
+ |
+} |
+with { |
+ encode "Ims3gpp"; |
+} |
Index: v2.0.0/xsd/http_uri_etsi_org_ngn_params_xml_comm_div_info.ttcn3view |
=================================================================== |
--- v2.0.0/xsd/http_uri_etsi_org_ngn_params_xml_comm_div_info.ttcn3view (nonexistent) |
+++ v2.0.0/xsd/http_uri_etsi_org_ngn_params_xml_comm_div_info.ttcn3view (revision 552) |
@@ -0,0 +1,157 @@ |
+module http_uri_etsi_org_ngn_params_xml_comm_div_info { |
+ import from XSDAUX language "TTCN-3:2010" all; |
+ |
+ type record of Diversion_reason_info_type Diversion_reason_info_types; |
+ |
+ type record Comm_div_ntfy_info_type { |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ User_info_type originating_user_info optional, |
+ XSDAUX.anyURI diverting_user_info optional, |
+ XSDAUX.anyURI diverted_to_user_info optional, |
+ XSDAUX.dateTime diversion_time_info optional, |
+ Diversion_reason_info_type diversion_reason_info optional, |
+ Diversion_rule_info_type diversion_rule_info optional, |
+ record of anytype elem_list optional |
+ } |
+ |
+ type record User_selection_criteria_type { |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ record of User_info_type user_info_list optional |
+ } |
+ |
+ type record Presence_status_info_type { |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ XSDAUX.string presence_status |
+ } |
+ |
+ type enumerated Diversion_reason_info_type { |
+ int302(302), |
+ int404(404), |
+ int408(408), |
+ int480(480), |
+ int486(486), |
+ int487(487), |
+ int503(503) |
+ } |
+ |
+ type record Comm_div_subs_info_type { |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ Comm_div_selection_criteria_type comm_div_selection_criteria optional, |
+ Comm_div_ntfy_trigger_criteria_type comm_div_ntfy_trigger_criteria optional, |
+ Comm_div_info_selection_criteria_type comm_div_info_selection_criteria optional, |
+ record of anytype elem_list optional |
+ } |
+ |
+ type record Diversion_rule_info_type { |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ XSDAUX.string diversion_rule |
+ } |
+ |
+ type record User_info_type { |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ XSDAUX.string user_name optional, |
+ XSDAUX.anyURI user_URI |
+ } |
+ |
+ type record Time_range_selection_criteria_type { |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ record of Time_range_type time_range_list optional |
+ } |
+ |
+ type Comm_div_info_type Comm_div_info; |
+ |
+ type record Comm_div_ntfy_trigger_criteria_type { |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ Time_range_selection_criteria_type notification_time_selection_criteria optional, |
+ Presence_status_selection_criteria_type presence_status_selection_criteria optional, |
+ XSDAUX.integerXSD notification_buffer_interval optional, |
+ record of anytype elem_list optional |
+ } |
+ |
+ type record Comm_div_info_selection_criteria_type { |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ XSDAUX.booleanXSD disable_originating_user_info optional, |
+ XSDAUX.booleanXSD disable_diverting_user_info optional, |
+ XSDAUX.booleanXSD disable_diverted_to_user_info optional, |
+ XSDAUX.booleanXSD disable_diversion_time_info optional, |
+ XSDAUX.booleanXSD disable_diversion_reason_info optional, |
+ XSDAUX.booleanXSD disable_diversion_rule_info optional, |
+ record of anytype elem_list optional |
+ } |
+ |
+ type record Time_range_type { |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ XSDAUX.dateTime start_time, |
+ XSDAUX.dateTime end_time |
+ } |
+ |
+ type record Presence_status_selection_criteria_type { |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ record of Presence_status_info_type presence_status_info_list optional |
+ } |
+ |
+ type record Diversion_reason_selection_criteria_type { |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ Diversion_reason_info_types diversion_reason_info |
+ } |
+ |
+ type record Comm_div_info_type { |
+ XSDAUX.anyURI entity, |
+ Comm_div_subs_info_type comm_div_subs_info optional, |
+ Comm_div_ntfy_info_type comm_div_ntfy_info optional, |
+ record of anytype elem_list optional |
+ } |
+ |
+ type record Comm_div_selection_criteria_type { |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ User_selection_criteria_type originating_user_selection_criteria optional, |
+ XSDAUX.anyURI diverting_user_selection_criteria optional, |
+ XSDAUX.anyURI diverted_to_user_selection_criteria optional, |
+ Time_range_selection_criteria_type diversion_time_selection_criteria optional, |
+ Diversion_reason_selection_criteria_type diversion_reason_selection_criteria optional, |
+ record of anytype elem_list optional |
+ } |
+ |
+} |
+with { |
+ encode "CDIVN"; |
+} |
Index: v2.0.0/xsd/http_uri_etsi_org_ngn_params_xml_simservs_mcid.ttcn3view |
=================================================================== |
--- v2.0.0/xsd/http_uri_etsi_org_ngn_params_xml_simservs_mcid.ttcn3view (nonexistent) |
+++ v2.0.0/xsd/http_uri_etsi_org_ngn_params_xml_simservs_mcid.ttcn3view (revision 552) |
@@ -0,0 +1,26 @@ |
+module http_uri_etsi_org_ngn_params_xml_simservs_mcid { |
+ import from XSDAUX language "TTCN-3:2010" all; |
+ |
+ type record ResponseType { |
+ BitType mcidResponseIndicator, |
+ BitType holdingProvidedIndicator |
+ } |
+ |
+ type XSDAUX.string BitType; |
+ |
+ type record Mcid { |
+ union { |
+ RequestType request, |
+ ResponseType response |
+ } choice |
+ } |
+ |
+ type record RequestType { |
+ BitType mcidRequestIndicator, |
+ BitType holdingIndicator |
+ } |
+ |
+} |
+with { |
+ encode "MCID"; |
+} |
Index: v2.0.0/xsd/http_uri_etsi_org_ngn_params_xml_simservs_pstn.ttcn3view |
=================================================================== |
--- v2.0.0/xsd/http_uri_etsi_org_ngn_params_xml_simservs_pstn.ttcn3view (nonexistent) |
+++ v2.0.0/xsd/http_uri_etsi_org_ngn_params_xml_simservs_pstn.ttcn3view (revision 552) |
@@ -0,0 +1,290 @@ |
+module http_uri_etsi_org_ngn_params_xml_simservs_pstn { |
+ import from XSDAUX language "TTCN-3:2010" all; |
+ |
+ type record PSTN_transit { |
+ record length (1 .. 2) of BearerCapabilityType bearerInfomationElement_list, |
+ record length (0 .. 2) of HighLayerCompatibilityType highLayerCompatibility_list optional, |
+ LowLayerCompatibilityType lowLayerCompatibility optional, |
+ record of ProgressIndicatorType progressIndicator_list optional, |
+ record of DisplayType display__list optional |
+ } |
+ |
+ type XSDAUX.string SevenBitType; |
+ |
+ type record LLOctet5aType { |
+ OneBitType synchronousAsynchronous, |
+ OneBitType negotiation, |
+ FiveBitType userRate |
+ } |
+ |
+ type record LLOctet7aTR9577Type { |
+ FourBitType additionalLayer3Info |
+ } |
+ |
+ type record LLOctet4Type { |
+ TwoBitType transferMode, |
+ FiveBitType informationTransferRate |
+ } |
+ |
+ type record LLOctet6aUserSpecificType { |
+ SevenBitType userSpecificLayer2Information |
+ } |
+ |
+ type record LLOctet3aType { |
+ OneBitType negotiationIndicator |
+ } |
+ |
+ type record BCOctet5Type { |
+ TwoBitType layer1Identification, |
+ FiveBitType userInfoLayer1Protocol |
+ } |
+ |
+ type record BCOctet4Type { |
+ TwoBitType transferMode, |
+ FiveBitType informationTransferRate |
+ } |
+ |
+ type record BCOctet7Type { |
+ TwoBitType layer3Identification, |
+ FiveBitType userInfoLayer3Protocol |
+ } |
+ |
+ type record BCOctet5bV120Type { |
+ OneBitType rateAdaptionHeader, |
+ OneBitType multipleFrameEstablishmentSupport, |
+ OneBitType modeOfOperation, |
+ OneBitType logicalLinkIdentifier, |
+ OneBitType assignor, |
+ OneBitType inbandOutbandNegotiation |
+ } |
+ |
+ type XSDAUX.string ThreeBitType; |
+ |
+ type record LLOctet6aHDLCType { |
+ TwoBitType mode |
+ } |
+ |
+ type record LLOctet7bTR9577Type { |
+ FourBitType additionalLayer3Info |
+ } |
+ |
+ type record DisplayType { |
+ DispOctet3Type dispOctet3 |
+ } |
+ |
+ type record HLOctet3Type { |
+ TwoBitType codingStandard, |
+ ThreeBitType interpretation, |
+ TwoBitType presentationMethod |
+ } |
+ |
+ type record LowLayerCompatibilityType { |
+ LLOctet3Type lLOctet3, |
+ LLOctet3aType lLOctet3a optional, |
+ LLOctet4Type lLOctet4, |
+ LLOctet4_1Type lLOctet4_1 optional, |
+ LLOctet5Type lLOctet5 optional, |
+ LLOctet5aType lLOctet5a optional, |
+ LLOctet5bV110Type lLOctet5bV110 optional, |
+ LLOctet5bV120Type lLOctet5bV120 optional, |
+ LLOctet5cType lLOctet5c optional, |
+ LLOctet5dType lLOctet5d optional, |
+ LLOctet6Type lLOctet6 optional, |
+ LLOctet6aHDLCType lLOctet6aHDLC optional, |
+ LLOctet6aUserSpecificType lLOctet6aUserSpecific optional, |
+ LLOctet6bType lLOctet6b optional, |
+ LLOctet7Type lLOctet7, |
+ LLOctet7aUserSpecificType lLOctet7aUserSpecific optional, |
+ LLOctet7aX25Type lLOctet7aX25 optional, |
+ LLOctet7bX25Type lLOctet7bX25 optional, |
+ LLOctet7cType lLOctet7c optional, |
+ LLOctet7aTR9577Type lLOctet7aTR9577 optional, |
+ LLOctet7bTR9577Type lLOctet7bTR9577 optional |
+ } |
+ |
+ type record BCOctet5dType { |
+ OneBitType duplexMode, |
+ SixBitType modemType |
+ } |
+ |
+ type record BCOctet3Type { |
+ TwoBitType codingStandard, |
+ FiveBitType informationTransferCabability |
+ } |
+ |
+ type record LLOctet5bV120Type { |
+ OneBitType rateAdaptionHeader, |
+ OneBitType multipleFrameEstablishmentSupport, |
+ OneBitType modeOfOperation, |
+ OneBitType logicalLinkIdentifier, |
+ OneBitType assignor, |
+ OneBitType inbandOutbandNegotiation |
+ } |
+ |
+ type record LLOctet4_1Type { |
+ SevenBitType rateMultiplier |
+ } |
+ |
+ type record LLOctet5dType { |
+ OneBitType duplexMode, |
+ SixBitType modemType |
+ } |
+ |
+ type XSDAUX.string FourBitType; |
+ |
+ type record BCOctet5bV110Type { |
+ TwoBitType intermediateRate, |
+ OneBitType nIConTX, |
+ OneBitType nIConRX, |
+ OneBitType flowControlOnTX, |
+ OneBitType flowControlOnRX |
+ } |
+ |
+ type record LLOctet3Type { |
+ TwoBitType codingStandard, |
+ FiveBitType informationTransferCapability |
+ } |
+ |
+ type record LLOctet7cType { |
+ SevenBitType packetWindowSize |
+ } |
+ |
+ type record BCOctet5cType { |
+ TwoBitType numberOfStopBits, |
+ TwoBitType numberOfDataBits, |
+ ThreeBitType parity |
+ } |
+ |
+ type record LLOctet6Type { |
+ TwoBitType layer2Identification, |
+ FiveBitType userInfoLayer2Protocol |
+ } |
+ |
+ type record LLOctet7aX25Type { |
+ TwoBitType mode |
+ } |
+ |
+ type record LLOctet7bX25Type { |
+ FourBitType defaultPacketSize |
+ } |
+ |
+ type record HLOctet4aMaintenanceType { |
+ SevenBitType highLayerCharacteristics |
+ } |
+ |
+ type record DispOctet3Type { |
+ SevenBitType displayInformation |
+ } |
+ |
+ type record LLOctet6bType { |
+ SevenBitType windowSize |
+ } |
+ |
+ type record BCOctet7bType { |
+ FourBitType additionalLayer3Info |
+ } |
+ |
+ type record LLOctet5cType { |
+ TwoBitType numberOfStopBits, |
+ TwoBitType numberOfDataBits, |
+ ThreeBitType parity |
+ } |
+ |
+ type record ProgressIndicatorType { |
+ ProgressOctet3Type progressOctet3, |
+ ProgressOctet4Type progressOctet4 |
+ } |
+ |
+ type XSDAUX.string OneBitType; |
+ |
+ type record LLOctet5Type { |
+ TwoBitType layer1Identification, |
+ FiveBitType userInfoLayer1Protocol |
+ } |
+ |
+ type record ProgressOctet3Type { |
+ TwoBitType codingStandard, |
+ FourBitType location |
+ } |
+ |
+ type XSDAUX.string SixBitType; |
+ |
+ type record LLOctet7Type { |
+ TwoBitType layer3Identification, |
+ FiveBitType userInfoLayer3Protocol |
+ } |
+ |
+ type record LLOctet5bV110Type { |
+ TwoBitType intermediateRate, |
+ OneBitType nIConTX, |
+ OneBitType nIConRX, |
+ OneBitType flowControlOnTX, |
+ OneBitType flowControlOnRX |
+ } |
+ |
+ type record BCOctet6Type { |
+ TwoBitType layer2Identification, |
+ FiveBitType userInfoLayer2Protocol |
+ } |
+ |
+ type record HLOctet4Type { |
+ SevenBitType highLayerCharacteristics |
+ } |
+ |
+ type record BCOctet5aType { |
+ OneBitType synchronousAsynchronous, |
+ OneBitType negotiation, |
+ FiveBitType userRate |
+ } |
+ |
+ type XSDAUX.string FiveBitType; |
+ |
+ type XSDAUX.string TwoBitType; |
+ |
+ type record HighLayerCompatibilityType { |
+ HLOctet3Type hLOctet3, |
+ HLOctet4Type hLOctet4, |
+ HLOctet4aMaintenanceType hLOctet4aMaintenance optional, |
+ HLOctet4aAudioType hLOctet4Audio optional |
+ } |
+ |
+ type record BearerCapabilityType { |
+ BCOctet3Type bCoctet3, |
+ BCOctet4Type bCoctet4, |
+ BCOctet4_1Type bCoctet4_1 optional, |
+ BCOctet5Type bCoctet5 optional, |
+ BCOctet5aType bCoctet5a optional, |
+ BCOctet5bV110Type bCoctet5bV110 optional, |
+ BCOctet5bV120Type bCoctet5bV120 optional, |
+ BCOctet5cType bCoctet5c optional, |
+ BCOctet5dType bCoctet5d optional, |
+ BCOctet6Type bCoctet6 optional, |
+ BCOctet7Type bCoctet7 optional, |
+ BCOctet7aType bCoctet7a optional, |
+ BCOctet7bType bCoctet7b optional |
+ } |
+ |
+ type record HLOctet4aAudioType { |
+ SevenBitType videoTelephonyCharacteristics |
+ } |
+ |
+ type record BCOctet7aType { |
+ FourBitType additionalLayer3Info |
+ } |
+ |
+ type record ProgressOctet4Type { |
+ SevenBitType progressDescription |
+ } |
+ |
+ type record BCOctet4_1Type { |
+ SevenBitType rateMultiplier |
+ } |
+ |
+ type record LLOctet7aUserSpecificType { |
+ SevenBitType optionalLayer3Information |
+ } |
+ |
+} |
+with { |
+ encode "PSTN"; |
+} |
Index: v2.0.0/xsd/http_uri_etsi_org_ngn_params_xml_simservs_xcap.ttcn3view |
=================================================================== |
--- v2.0.0/xsd/http_uri_etsi_org_ngn_params_xml_simservs_xcap.ttcn3view (nonexistent) |
+++ v2.0.0/xsd/http_uri_etsi_org_ngn_params_xml_simservs_xcap.ttcn3view (revision 552) |
@@ -0,0 +1,202 @@ |
+module http_uri_etsi_org_ngn_params_xml_simservs_xcap { |
+ import from XSDAUX language "TTCN-3:2010" all; |
+ |
+ import from urn_ietf_params_xml_ns_common_policy language "XSD" all; |
+ |
+ type Empty_element_type Roaming; |
+ |
+ type XSDAUX.string TwobitType; |
+ |
+ /** |
+ * @desc |
+ * This is the communication diversion configuration |
+document. |
+ */ |
+ type record Communication_diversion { |
+ XSDAUX.booleanXSD active optional, |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ urn_ietf_params_xml_ns_common_policy.Ruleset ruleset optional |
+ } |
+ |
+ type Empty_element_type Rule_deactivated; |
+ |
+ type record SimservType { |
+ XSDAUX.booleanXSD active optional, |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional |
+ } |
+ |
+ type XSDAUX.hexBinary SixteenbitType; |
+ |
+ type XSDAUX.string Presence_status_activity_type; |
+ |
+ type SimservType AbsService; |
+ |
+ type Empty_element_type Anonymous; |
+ |
+ type Empty_element_type Busy; |
+ |
+ type Allow_action_type Allow; |
+ |
+ type enumerated Reveal_URIoptions_type { |
+ false_, |
+ not_reveal_GRUU, |
+ true_ |
+ } |
+ |
+ /** |
+ * @desc |
+ * XML Schema for data manipulation of ETSI |
+ NGN PSTN/ISDN Simulation Services |
+ |
+ */ |
+ type record Simservs { |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ record of union { |
+ SimservType absService, |
+ Terminating_identity_presentation_restriction terminating_identity_presentation_restriction, |
+ SimservType terminating_identity_presentation, |
+ Originating_identity_presentation_restriction originating_identity_presentation_restriction, |
+ SimservType originating_identity_presentation, |
+ Communication_diversion communication_diversion, |
+ Incoming_communication_barring incoming_communication_barring, |
+ Outgoing_communication_barring outgoing_communication_barring |
+ } choice optional, |
+ record { |
+ record of anytype elem_list optional |
+ } extensions optional |
+ } |
+ |
+ type SimservType Originating_identity_presentation; |
+ |
+ /** |
+ * @desc |
+ * This is the outgoing communication barring configuration |
+document. |
+ */ |
+ type record Outgoing_communication_barring { |
+ XSDAUX.booleanXSD active optional, |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ urn_ietf_params_xml_ns_common_policy.Ruleset ruleset optional |
+ } |
+ |
+ type Media_type1 Media; |
+ |
+ /** |
+ * @desc |
+ * Terminating Identity presentation Restriction |
+ |
+ */ |
+ type record Terminating_identity_presentation_restriction { |
+ XSDAUX.booleanXSD active optional, |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ enumerated { |
+ presentation_not_restricted, |
+ presentation_restricted |
+ } default_behaviour optional |
+ } |
+ |
+ type record Empty_element_type { |
+ } |
+ |
+ type Empty_element_type Not_reachable; |
+ |
+ type Empty_element_type Communication_diverted; |
+ |
+ type XSDAUX.integerXSD CugIndexType; |
+ |
+ type XSDAUX.hexBinary NetworkIdentityType; |
+ |
+ type record CugRequestType { |
+ XSDAUX.booleanXSD outgoingAccessRequest, |
+ CugIndexType cugIndex |
+ } |
+ |
+ type XSDAUX.string Media_type1; |
+ |
+ /** |
+ * @desc |
+ * Originating Identity presentation Restriction |
+ |
+ */ |
+ type record Originating_identity_presentation_restriction { |
+ XSDAUX.booleanXSD active optional, |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ enumerated { |
+ presentation_not_restricted, |
+ presentation_restricted |
+ } default_behaviour optional |
+ } |
+ |
+ type XSDAUX.positiveInteger NoReplyTimer; |
+ |
+ /** |
+ * @desc |
+ * This is the incoming communication barring configuration |
+document. |
+ */ |
+ type record Incoming_communication_barring { |
+ XSDAUX.booleanXSD active optional, |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ urn_ietf_params_xml_ns_common_policy.Ruleset ruleset optional |
+ } |
+ |
+ type XSDAUX.booleanXSD Allow_action_type; |
+ |
+ type Presence_status_activity_type Presence_status; |
+ |
+ type record Cug { |
+ XSDAUX.booleanXSD active optional, |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ CugRequestType cugCallOperation optional, |
+ NetworkIdentityType networkIndicator optional, |
+ SixteenbitType cugInterlockBinaryCode optional, |
+ TwobitType cugCommunicationIndicator optional |
+ } |
+ |
+ type Empty_element_type No_answer; |
+ |
+ type SimservType Terminating_identity_presentation; |
+ |
+ type Forward_to_type Forward_to; |
+ |
+ type Empty_element_type Not_registered; |
+ |
+ type record Forward_to_type { |
+ XSDAUX.anyURI target, |
+ XSDAUX.booleanXSD notify_caller optional, |
+ Reveal_URIoptions_type reveal_identity_to_caller optional, |
+ Reveal_URIoptions_type reveal_served_user_identity_to_caller optional, |
+ XSDAUX.booleanXSD notify_served_user optional, |
+ XSDAUX.booleanXSD notify_served_user_on_outbound_call optional, |
+ Reveal_URIoptions_type reveal_identity_to_target optional, |
+ NoReplyTimer noReplyTimer optional |
+ } |
+ |
+} |
+with { |
+ encode "SupplementaryServices"; |
+} |
Index: v2.0.0/xsd/http_www_w3_org_XML_1998_namespace.ttcn3view |
=================================================================== |
--- v2.0.0/xsd/http_www_w3_org_XML_1998_namespace.ttcn3view (nonexistent) |
+++ v2.0.0/xsd/http_www_w3_org_XML_1998_namespace.ttcn3view (revision 552) |
@@ -0,0 +1,30 @@ |
+module http_www_w3_org_XML_1998_namespace { |
+ import from XSDAUX language "TTCN-3:2010" all; |
+ |
+ type union Lang { |
+ XSDAUX.languageXSD alt_0, |
+ enumerated { |
+ x |
+ } alt_1 |
+ } |
+ |
+ type XSDAUX.anyURI Base; |
+ |
+ type XSDAUX.ID Id; |
+ |
+ type record SpecialAttrs { |
+ Base base optional, |
+ Lang lang optional, |
+ Space space optional, |
+ Id id optional |
+ } |
+ |
+ type enumerated Space { |
+ default_, |
+ preserve |
+ } |
+ |
+} |
+with { |
+ encode "xml"; |
+} |
Index: v2.0.0/xsd/urn_3gpp_ns_cw_1_0.ttcn3view |
=================================================================== |
--- v2.0.0/xsd/urn_3gpp_ns_cw_1_0.ttcn3view (nonexistent) |
+++ v2.0.0/xsd/urn_3gpp_ns_cw_1_0.ttcn3view (revision 552) |
@@ -0,0 +1,19 @@ |
+module urn_3gpp_ns_cw_1_0 { |
+ type TCWtype Ims_cw; |
+ |
+ type record TCWtype { |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ TEmptyType communication_waiting_indication optional, |
+ record of anytype elem_list optional |
+ } |
+ |
+ type record TEmptyType { |
+ } |
+ |
+} |
+with { |
+ encode "cw"; |
+} |
Index: v2.0.0/xsd/urn_ietf_params_xml_ns_common_policy.ttcn3view |
=================================================================== |
--- v2.0.0/xsd/urn_ietf_params_xml_ns_common_policy.ttcn3view (nonexistent) |
+++ v2.0.0/xsd/urn_ietf_params_xml_ns_common_policy.ttcn3view (revision 552) |
@@ -0,0 +1,68 @@ |
+module urn_ietf_params_xml_ns_common_policy { |
+ import from XSDAUX language "TTCN-3:2010" all; |
+ |
+ type record SphereType { |
+ XSDAUX.string value_ |
+ } |
+ |
+ type record ExtensibleType { |
+ record of anytype elem_list optional |
+ } |
+ |
+ type record Ruleset { |
+ record of RuleType rule_list optional |
+ } |
+ |
+ type record RuleType { |
+ XSDAUX.ID id, |
+ ConditionsType conditions optional, |
+ ExtensibleType actions optional, |
+ ExtensibleType transformations optional |
+ } |
+ |
+ type record ConditionsType { |
+ record length (1 .. infinity) of union { |
+ IdentityType identity, |
+ SphereType sphere, |
+ ValidityType validity, |
+ record of anytype elem_list |
+ } content optional |
+ } |
+ |
+ type record ManyType { |
+ XSDAUX.string domain optional, |
+ record of union { |
+ ExceptType except_, |
+ anytype elem |
+ } content optional |
+ } |
+ |
+ type record ValidityType { |
+ record length (1 .. infinity) of record { |
+ XSDAUX.dateTime from_, |
+ XSDAUX.dateTime until |
+ } content |
+ } |
+ |
+ type record IdentityType { |
+ record length (1 .. infinity) of union { |
+ OneType one, |
+ ManyType many, |
+ anytype elem |
+ } content |
+ } |
+ |
+ type record OneType { |
+ XSDAUX.anyURI id, |
+ anytype elem optional |
+ } |
+ |
+ type record ExceptType { |
+ XSDAUX.string domain optional, |
+ XSDAUX.anyURI id optional |
+ } |
+ |
+} |
+with { |
+ encode "common_policy"; |
+} |
Index: v2.0.0/xsd/urn_ietf_params_xml_ns_conference_info.ttcn3view |
=================================================================== |
--- v2.0.0/xsd/urn_ietf_params_xml_ns_conference_info.ttcn3view (nonexistent) |
+++ v2.0.0/xsd/urn_ietf_params_xml_ns_conference_info.ttcn3view (revision 552) |
@@ -0,0 +1,256 @@ |
+module urn_ietf_params_xml_ns_conference_info { |
+ import from XSDAUX language "TTCN-3:2010" all; |
+ |
+ type enumerated Endpoint_status_type { |
+ alerting, |
+ connected, |
+ dialing_in, |
+ dialing_out, |
+ disconnected, |
+ disconnecting, |
+ muted_via_focus, |
+ on_hold, |
+ pending |
+ } |
+ |
+ type record Users_type { |
+ State_type state optional, |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ record of User_type user_list optional, |
+ record of anytype elem_list optional |
+ } |
+ |
+ type record of XSDAUX.string Keywords_type; |
+ |
+ type enumerated State_type { |
+ deleted, |
+ full, |
+ partial |
+ } |
+ |
+ type record Conference_media_type { |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ record length (1 .. infinity) of Conference_medium_type entry_list |
+ } |
+ |
+ type record Endpoint_type { |
+ XSDAUX.string entity optional, |
+ State_type state optional, |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ XSDAUX.string display_text optional, |
+ Execution_type referred optional, |
+ Endpoint_status_type status optional, |
+ Joining_type joining_method optional, |
+ Execution_type joining_info optional, |
+ Disconnection_type disconnection_method optional, |
+ Execution_type disconnection_info optional, |
+ record of Media_type media_list optional, |
+ Call_type call_info optional, |
+ record of anytype elem_list optional |
+ } |
+ |
+ type record Sip_dialog_id_type { |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ XSDAUX.string display_text optional, |
+ XSDAUX.string call_id, |
+ XSDAUX.string from_tag, |
+ XSDAUX.string to_tag, |
+ record of anytype elem_list optional |
+ } |
+ |
+ type record Conference_description_type { |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ XSDAUX.string display_text optional, |
+ XSDAUX.string subject optional, |
+ XSDAUX.string free_text optional, |
+ Keywords_type keywords optional, |
+ Uris_type conf_uris optional, |
+ Uris_type service_uris optional, |
+ XSDAUX.unsignedInt maximum_user_count optional, |
+ Conference_media_type available_media optional, |
+ record of anytype elem_list optional |
+ } |
+ |
+ type Conference_type Conference_info; |
+ |
+ type record Conference_state_type { |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ XSDAUX.unsignedInt user_count optional, |
+ XSDAUX.booleanXSD active optional, |
+ XSDAUX.booleanXSD locked optional, |
+ record of anytype elem_list optional |
+ } |
+ |
+ type record Conference_type { |
+ XSDAUX.anyURI entity, |
+ State_type state optional, |
+ XSDAUX.unsignedInt version optional, |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ Conference_description_type conference_description optional, |
+ Host_type host_info optional, |
+ Conference_state_type conference_state optional, |
+ Users_type users optional, |
+ Uris_type sidebars_by_ref optional, |
+ Sidebars_by_val_type sidebars_by_val optional, |
+ record of anytype elem_list optional |
+ } |
+ |
+ type record Uri_type { |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ XSDAUX.anyURI uri, |
+ XSDAUX.string display_text optional, |
+ XSDAUX.string purpose optional, |
+ Execution_type modified optional, |
+ record of anytype elem_list optional |
+ } |
+ |
+ type record Host_type { |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ XSDAUX.string display_text optional, |
+ XSDAUX.anyURI web_page optional, |
+ Uris_type uris optional, |
+ record of anytype elem_list optional |
+ } |
+ |
+ type record of XSDAUX.languageXSD User_languages_type; |
+ |
+ type record Uris_type { |
+ State_type state optional, |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ record length (1 .. infinity) of Uri_type entry_list |
+ } |
+ |
+ type record Execution_type { |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ XSDAUX.dateTime when optional, |
+ XSDAUX.string reason optional, |
+ XSDAUX.anyURI by optional |
+ } |
+ |
+ type enumerated Media_status_type { |
+ inactive, |
+ recvonly, |
+ sendonly, |
+ sendrecv |
+ } |
+ |
+ type record User_type { |
+ XSDAUX.anyURI entity optional, |
+ State_type state optional, |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ XSDAUX.string display_text optional, |
+ Uris_type associated_aors optional, |
+ User_roles_type roles optional, |
+ User_languages_type languages optional, |
+ XSDAUX.anyURI cascaded_focus optional, |
+ record of Endpoint_type endpoint_list optional, |
+ record of anytype elem_list optional |
+ } |
+ |
+ type record Media_type { |
+ XSDAUX.string id, |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ XSDAUX.string display_text optional, |
+ XSDAUX.string type_ optional, |
+ XSDAUX.string label_ optional, |
+ XSDAUX.string src_id optional, |
+ Media_status_type status optional, |
+ record of anytype elem_list optional |
+ } |
+ |
+ type record Call_type { |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ union { |
+ Sip_dialog_id_type sip, |
+ record of anytype elem_list |
+ } choice optional |
+ } |
+ |
+ type record Conference_medium_type { |
+ XSDAUX.string label_, |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ XSDAUX.string display_text optional, |
+ XSDAUX.string type_, |
+ Media_status_type status optional, |
+ record of anytype elem_list optional |
+ } |
+ |
+ type record Sidebars_by_val_type { |
+ State_type state optional, |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ record of Conference_type entry_list optional |
+ } |
+ |
+ type enumerated Disconnection_type { |
+ booted, |
+ busy, |
+ departed, |
+ failed |
+ } |
+ |
+ type enumerated Joining_type { |
+ dialed_in, |
+ dialed_out, |
+ focus_owner |
+ } |
+ |
+ type record User_roles_type { |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ record length (1 .. infinity) of XSDAUX.string entry_list |
+ } |
+ |
+} |
+with { |
+ encode "CONF"; |
+} |
Index: v2.0.0/xsd/urn_ietf_params_xml_ns_pidf.ttcn3view |
=================================================================== |
--- v2.0.0/xsd/urn_ietf_params_xml_ns_pidf.ttcn3view (nonexistent) |
+++ v2.0.0/xsd/urn_ietf_params_xml_ns_pidf.ttcn3view (revision 552) |
@@ -0,0 +1,50 @@ |
+module urn_ietf_params_xml_ns_pidf { |
+ import from XSDAUX language "TTCN-3:2010" all; |
+ |
+ import from http_www_w3_org_XML_1998_namespace language "XSD" all; |
+ |
+ type record Tuple { |
+ XSDAUX.ID id, |
+ Status status, |
+ record of anytype elem_list optional, |
+ Contact contact optional, |
+ record of Note note_list optional, |
+ XSDAUX.dateTime timestamp optional |
+ } |
+ |
+ type record Status { |
+ Basic basic optional, |
+ record of anytype elem_list optional |
+ } |
+ |
+ type enumerated Basic { |
+ closed, |
+ open |
+ } |
+ |
+ type XSDAUX.booleanXSD MustUnderstand; |
+ |
+ type record Presence_1 { |
+ XSDAUX.anyURI entity, |
+ record of Tuple tuple_list optional, |
+ record of Note note_list optional, |
+ record of anytype elem_list optional |
+ } |
+ |
+ type record Contact { |
+ Qvalue priority optional, |
+ XSDAUX.anyURI content |
+ } |
+ |
+ type record Note { |
+ http_www_w3_org_XML_1998_namespace.Lang lang optional, |
+ XSDAUX.string content |
+ } |
+ |
+ type Presence_1 Presence; |
+ |
+ type XSDAUX.decimal Qvalue; |
+} |
+with { |
+ encode "pidf"; |
+} |
Index: v2.0.0/xsd/urn_ietf_params_xml_ns_pidf_geopriv10.ttcn3view |
=================================================================== |
--- v2.0.0/xsd/urn_ietf_params_xml_ns_pidf_geopriv10.ttcn3view (nonexistent) |
+++ v2.0.0/xsd/urn_ietf_params_xml_ns_pidf_geopriv10.ttcn3view (revision 552) |
@@ -0,0 +1,34 @@ |
+module urn_ietf_params_xml_ns_pidf_geopriv10 { |
+ import from XSDAUX language "TTCN-3:2010" all; |
+ |
+ import from urn_ietf_params_xml_ns_pidf_geopriv10_basicPolicy language "XSD" all; |
+ |
+ import from http_www_w3_org_XML_1998_namespace language "XSD" all; |
+ |
+ type record Geopriv_1 { |
+ LocInfoType location_info, |
+ urn_ietf_params_xml_ns_pidf_geopriv10_basicPolicy.LocPolicyType usage_rules, |
+ LocMethod method optional, |
+ LocProvidedBy provided_by optional, |
+ record of anytype elem_list optional |
+ } |
+ |
+ type record LocInfoType { |
+ record of anytype elem_list optional |
+ } |
+ |
+ type record LocProvidedBy { |
+ record length (1 .. infinity) of anytype elem_list |
+ } |
+ |
+ type Geopriv_1 Geopriv; |
+ |
+ type record LocMethod { |
+ http_www_w3_org_XML_1998_namespace.Lang lang optional, |
+ XSDAUX.string content |
+ } |
+ |
+} |
+with { |
+ encode "pidf_lo"; |
+} |
Index: v2.0.0/xsd/urn_ietf_params_xml_ns_pidf_geopriv10_basicPolicy.ttcn3view |
=================================================================== |
--- v2.0.0/xsd/urn_ietf_params_xml_ns_pidf_geopriv10_basicPolicy.ttcn3view (nonexistent) |
+++ v2.0.0/xsd/urn_ietf_params_xml_ns_pidf_geopriv10_basicPolicy.ttcn3view (revision 552) |
@@ -0,0 +1,22 @@ |
+module urn_ietf_params_xml_ns_pidf_geopriv10_basicPolicy { |
+ import from XSDAUX language "TTCN-3:2010" all; |
+ |
+ import from http_www_w3_org_XML_1998_namespace language "XSD" all; |
+ |
+ type record LocPolicyType { |
+ XSDAUX.booleanXSD retransmission_allowed optional, |
+ XSDAUX.dateTime retention_expiry optional, |
+ XSDAUX.anyURI external_ruleset optional, |
+ Notewell note_well optional, |
+ record of anytype elem_list optional |
+ } |
+ |
+ type record Notewell { |
+ http_www_w3_org_XML_1998_namespace.Lang lang optional, |
+ XSDAUX.string content |
+ } |
+ |
+} |
+with { |
+ encode "geopriv10basic"; |
+} |
Index: v2.0.0/xsd/urn_ietf_params_xml_ns_reginfo.ttcn3view |
=================================================================== |
--- v2.0.0/xsd/urn_ietf_params_xml_ns_reginfo.ttcn3view (nonexistent) |
+++ v2.0.0/xsd/urn_ietf_params_xml_ns_reginfo.ttcn3view (revision 552) |
@@ -0,0 +1,66 @@ |
+module urn_ietf_params_xml_ns_reginfo { |
+ import from XSDAUX language "TTCN-3:2010" all; |
+ |
+ import from http_www_w3_org_XML_1998_namespace language "XSD" all; |
+ |
+ type record Reginfo { |
+ XSDAUX.nonNegativeInteger version, |
+ enumerated { |
+ full, |
+ partial |
+ } state, |
+ record of Registration registration_list optional, |
+ record of anytype elem_list optional |
+ } |
+ |
+ type record Registration { |
+ XSDAUX.anyURI aor, |
+ XSDAUX.string id, |
+ enumerated { |
+ active, |
+ init, |
+ terminated |
+ } state, |
+ record of Contact contact_list optional, |
+ record of anytype elem_list optional |
+ } |
+ |
+ type record Contact { |
+ enumerated { |
+ active, |
+ terminated |
+ } state, |
+ enumerated { |
+ created, |
+ deactivated, |
+ expired, |
+ probation, |
+ refreshed, |
+ registered, |
+ rejected, |
+ shortened, |
+ unregistered |
+ } event, |
+ XSDAUX.unsignedLong duration_registered optional, |
+ XSDAUX.unsignedLong expires optional, |
+ XSDAUX.unsignedLong retry_after optional, |
+ XSDAUX.string id, |
+ XSDAUX.string q optional, |
+ XSDAUX.string callid optional, |
+ XSDAUX.unsignedLong cseq optional, |
+ XSDAUX.anyURI uri, |
+ record { |
+ http_www_w3_org_XML_1998_namespace.Lang lang optional, |
+ XSDAUX.string content |
+ } display_name optional, |
+ record of record { |
+ XSDAUX.string name, |
+ XSDAUX.string content |
+ } unknown_param_list optional, |
+ record of anytype elem_list optional |
+ } |
+ |
+} |
+with { |
+ encode "regInfo"; |
+} |
Index: v2.0.0/xsd/urn_ietf_params_xml_ns_resource_lists.ttcn3view |
=================================================================== |
--- v2.0.0/xsd/urn_ietf_params_xml_ns_resource_lists.ttcn3view (nonexistent) |
+++ v2.0.0/xsd/urn_ietf_params_xml_ns_resource_lists.ttcn3view (revision 552) |
@@ -0,0 +1,86 @@ |
+module urn_ietf_params_xml_ns_resource_lists { |
+ import from XSDAUX language "TTCN-3:2010" all; |
+ |
+ import from http_www_w3_org_XML_1998_namespace language "XSD" all; |
+ |
+ type record Entry_refType { |
+ XSDAUX.anyURI ref, |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ Display_nameType display_name optional, |
+ record of anytype elem_list optional |
+ } |
+ |
+ type record EntryType { |
+ XSDAUX.anyURI uri, |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ record { |
+ Display_nameType content |
+ } display_name optional, |
+ record of anytype elem_list optional |
+ } |
+ |
+ type record ListType { |
+ XSDAUX.string name optional, |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ Display_nameType display_name optional, |
+ record of record { |
+ union { |
+ record { |
+ XSDAUX.string name optional, |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ Display_nameType display_name optional, |
+ record of record { |
+ union { |
+ ListType.sequence_list[0].choice.list list, |
+ ExternalType external_, |
+ EntryType entry, |
+ Entry_refType entry_ref |
+ } choice |
+ } sequence_list optional, |
+ record of anytype elem_list optional |
+ } list, |
+ ExternalType external_, |
+ EntryType entry, |
+ Entry_refType entry_ref |
+ } choice |
+ } sequence_list optional, |
+ record of anytype elem_list optional |
+ } |
+ |
+ type record ExternalType { |
+ XSDAUX.anyURI anchor optional, |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional, |
+ Display_nameType display_name optional, |
+ record of anytype elem_list optional |
+ } |
+ |
+ type record Resource_lists { |
+ record of record { |
+ ListType list |
+ } sequence_list optional |
+ } |
+ |
+ type record Display_nameType { |
+ http_www_w3_org_XML_1998_namespace.Lang lang optional, |
+ XSDAUX.string content |
+ } |
+ |
+} |
+with { |
+ encode "ResourceList"; |
+} |
Index: v2.0.0/xsd/urn_oma_xml_xdm_common_policy.ttcn3view |
=================================================================== |
--- v2.0.0/xsd/urn_oma_xml_xdm_common_policy.ttcn3view (nonexistent) |
+++ v2.0.0/xsd/urn_oma_xml_xdm_common_policy.ttcn3view (revision 552) |
@@ -0,0 +1,26 @@ |
+module urn_oma_xml_xdm_common_policy { |
+ import from XSDAUX language "TTCN-3:2010" all; |
+ |
+ type record External_list { |
+ record of AnchorType entry_list optional |
+ } |
+ |
+ type EmptyType Anonymous_request; |
+ |
+ type EmptyType Other_identity; |
+ |
+ type record EmptyType { |
+ } |
+ |
+ type record AnchorType { |
+ XSDAUX.anyURI anc optional, |
+ record of record { |
+ charstring name, |
+ anytype value_ |
+ } anyAttributes optional |
+ } |
+ |
+} |
+with { |
+ encode "xdm_commonPolicy_v1_0"; |
+} |
Index: v2.0.0/xsd/CDIV.xsd |
=================================================================== |
--- v2.0.0/xsd/CDIV.xsd (nonexistent) |
+++ v2.0.0/xsd/CDIV.xsd (revision 552) |
@@ -0,0 +1,67 @@ |
+ |
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" |
+xmlns:ss="http://uri.etsi.org/ngn/params/xml/simservs/xcap" |
+xmlns:cp="urn:ietf:params:xml:ns:common-policy" |
+xmlns:ocp="urn:oma:xml:xdm:common-policy" |
+targetNamespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" |
+elementFormDefault="qualified" |
+attributeFormDefault="unqualified"> |
+<!-- import common policy definitions --> |
+<xs:import namespace="urn:ietf:params:xml:ns:common-policy" schemaLocation="common-policy.xsd"/> |
+<!-- import OMA common policy extensions --> |
+<xs:import namespace="urn:oma:xml:xdm:common-policy" schemaLocation="xdm_commonPolicy-v1_0.xsd"/> |
+<!-- communication diversion specific extensions to IETF common policy conditions. The |
+cp:conditionsType is expanded with the elements: ss:not-registered, ss:busy, ss:no-answer, ss:notreachable, |
+ss:media as optional elements --> |
+<!-- communication diversion rule set based on the common policy rule set.--> |
+<xs:element name="communication-diversion" substitutionGroup="ss:absService"> |
+<xs:annotation> |
+<xs:documentation>This is the communication diversion configuration |
+document.</xs:documentation> |
+</xs:annotation> |
+<xs:complexType> |
+<xs:complexContent> |
+<xs:extension base="ss:simservType"> |
+<xs:sequence> |
+<!-- add service specific elements here--> |
+<xs:element ref="cp:ruleset" minOccurs="0"/> |
+</xs:sequence> |
+</xs:extension> |
+<!-- service specific attributes can be defined here --> |
+</xs:complexContent> |
+</xs:complexType> |
+</xs:element> |
+<!-- communication diversion specific extensions to IETF common policy actions--> |
+<xs:element name="forward-to" type="ss:forward-to-type"/> <xs:simpleType name="reveal-URIoptions-type"> |
+<xs:restriction base="xs:string"> |
+<xs:enumeration value="false"/> |
+<xs:enumeration value="not-reveal-GRUU"/> |
+<xs:enumeration value="true"/> |
+</xs:restriction> |
+</xs:simpleType> |
+<!-- communication diversion specific type declarations --> |
+<xs:complexType name="forward-to-type"> |
+<xs:sequence> |
+<xs:element name="target" type="xs:anyURI" minOccurs="1" maxOccurs="1"/> |
+<xs:element name="notify-caller" type="xs:boolean" default="true" minOccurs="0"/> |
+<xs:element name="reveal-identity-to-caller" type="ss:reveal-URIoptions-type" |
+default="true" minOccurs="0"/> |
+<xs:element name="reveal-served-user-identity-to-caller" type="ss:reveal-URIoptions-type" |
+default="true" minOccurs="0"/> |
+<xs:element name="notify-served-user" type="xs:boolean" default="false" minOccurs="0"/> |
+<xs:element name="notify-served-user-on-outbound-call" type="xs:boolean" default="false" |
+minOccurs="0"/> |
+<xs:element name="reveal-identity-to-target" type="ss:reveal-URIoptions-type" |
+default="true" minOccurs="0"/> |
+<xs:element ref="ss:NoReplyTimer" minOccurs="0"/> |
+</xs:sequence> |
+</xs:complexType> |
+<xs:element name="NoReplyTimer"> |
+<xs:simpleType> |
+<xs:restriction base="xs:positiveInteger"> |
+<xs:minInclusive value="5"/> |
+<xs:maxInclusive value="180"/> |
+</xs:restriction> |
+</xs:simpleType> |
+</xs:element> |
+</xs:schema> |
\ No newline at end of file |
/v2.0.0/xsd/CDIV.xsd |
---|
Property changes: |
Added: svn:keywords |
## -0,0 +1 ## |
+LastChangedDate |
\ No newline at end of property |
Index: v2.0.0/xsd/cug.xsd |
=================================================================== |
--- v2.0.0/xsd/cug.xsd (nonexistent) |
+++ v2.0.0/xsd/cug.xsd (revision 552) |
@@ -0,0 +1,54 @@ |
+<?xml version="1.0" encoding="UTF-8"?> |
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ss="http://uri.etsi.org/ngn/params/xml/simservs/xcap" xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap" targetNamespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" elementFormDefault="qualified" attributeFormDefault="unqualified"> |
+ <xs:annotation> |
+ <xs:documentation>XML Schema Definition for the closed user group |
+ parameter</xs:documentation> |
+ </xs:annotation> |
+ <!--Definition of simple types--> |
+ <xs:simpleType name="twobitType"> |
+ <xs:restriction base="xs:string"> |
+ <xs:pattern value="[0-1][0-1]"/> |
+ </xs:restriction> |
+ </xs:simpleType> |
+ <xs:simpleType name="networkIdentityType"> |
+ <xs:restriction base="xs:hexBinary"> |
+ <xs:length value="1"/> |
+ </xs:restriction> |
+ </xs:simpleType> |
+ <xs:simpleType name="sixteenbitType"> |
+ <xs:restriction base="xs:hexBinary"> |
+ <xs:length value="2"/> |
+ </xs:restriction> |
+ </xs:simpleType> |
+ <xs:simpleType name="cugIndexType"> |
+ <xs:restriction base="xs:integer"> |
+ <xs:minInclusive value="0"/> |
+ <xs:maxInclusive value="32767"/> |
+ </xs:restriction> |
+ </xs:simpleType> |
+ <!--Definition of complex types--> |
+ <xs:complexType name="cugRequestType"> |
+ <xs:sequence> |
+ <xs:element name="outgoingAccessRequest" type="xs:boolean"/> |
+ <xs:element name="cugIndex" type="cugIndexType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <!--Definition of document structure--> |
+ <xs:element name="cug" substitutionGroup="ss:absService"> |
+ <xs:complexType> |
+ <xs:complexContent> |
+ <xs:extension base="ss:simservType"> |
+ <xs:sequence> |
+ <xs:element name="cugCallOperation" type="cugRequestType" minOccurs="0"/> |
+ <xs:element name="networkIndicator" type="networkIdentityType" |
+ minOccurs="0"/> |
+ <xs:element name="cugInterlockBinaryCode" type="sixteenbitType" |
+ minOccurs="0"/> |
+ <xs:element name="cugCommunicationIndicator" type="twobitType" |
+ minOccurs="0"/> |
+ </xs:sequence> |
+ </xs:extension> |
+ </xs:complexContent> |
+ </xs:complexType> |
+ </xs:element> |
+</xs:schema> |
\ No newline at end of file |
/v2.0.0/xsd/cug.xsd |
---|
Property changes: |
Added: svn:keywords |
## -0,0 +1 ## |
+LastChangedDate |
\ No newline at end of property |
Index: v2.0.0/xsd/simservs.xsd |
=================================================================== |
--- v2.0.0/xsd/simservs.xsd (nonexistent) |
+++ v2.0.0/xsd/simservs.xsd (revision 552) |
@@ -0,0 +1,83 @@ |
+ |
+<!-- TS 27.173 / 183 023 --> |
+<xs:schema targetNamespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" |
+ xmlns:ss="http://uri.etsi.org/ngn/params/xml/simservs/xcap" |
+ xmlns:xs="http://www.w3.org/2001/XMLSchema" |
+ elementFormDefault="qualified" |
+ attributeFormDefault="unqualified"> |
+ |
+<!-- The element "simservs" maps to the Common Parts of an NGN PSTN/ISDN Simulation services document --> |
+ |
+ <xs:element name="simservs"> |
+ <xs:annotation> |
+ <xs:documentation>XML Schema for data manipulation of ETSI |
+ NGN PSTN/ISDN Simulation Services |
+ </xs:documentation> |
+ </xs:annotation> |
+ <xs:complexType> |
+ <xs:sequence> |
+ <xs:group ref="ss:absServiceGroup" minOccurs="0" maxOccurs="unbounded" /> |
+ <xs:element name="extensions" minOccurs="0"> |
+ <xs:complexType> |
+ <xs:sequence> |
+ <xs:any namespace="##other" processContents="lax" |
+ minOccurs="0" maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ </xs:element> |
+ </xs:sequence> |
+ <xs:anyAttribute namespace="##any" processContents="lax"/> |
+ </xs:complexType> |
+ </xs:element> |
+ |
+ <xs:element name="absService" abstract="true" type="ss:simservType"/> |
+ |
+ <xs:complexType name="simservType"> |
+ <xs:attribute name="active" type="xs:boolean" |
+ use="optional" default="true" /> |
+ <xs:anyAttribute namespace="##any" processContents="lax"/> |
+ </xs:complexType> |
+ |
+ <!-- service specific IETF common policy condition elements--> |
+ <xs:element name="anonymous" type="ss:empty-element-type"/> |
+ <xs:element name="presence-status" type="ss:presence-status-activity-type"/> |
+ <xs:element name="media" type="ss:media-type1"/> |
+ <xs:element name="communication-diverted" type="ss:empty-element-type"/> |
+ <xs:element name="rule-deactivated" type="ss:empty-element-type"/> |
+ <xs:element name="not-registered" type="ss:empty-element-type"/> |
+ <xs:element name="busy" type="ss:empty-element-type"/> |
+ <xs:element name="no-answer" type="ss:empty-element-type"/> |
+ <xs:element name="not-reachable" type="ss:empty-element-type"/> |
+ <xs:element name="roaming" type="ss:empty-element-type"/> |
+ |
+ <!-- service specific type declarations --> |
+ <xs:simpleType name="media-type1"> |
+ <xs:restriction base="xs:string"/> |
+ </xs:simpleType> |
+ <xs:simpleType name="presence-status-activity-type"> |
+ <xs:restriction base="xs:string"/> |
+ </xs:simpleType> |
+ <xs:complexType name="empty-element-type"/> |
+ |
+ <!-- ETSI substitutionGroup workaround, because TTCN-3 does not support mapping of substitutionGroup --> |
+ <xs:group name="absServiceGroup"> |
+ <xs:choice> |
+ <!-- default --> |
+ <xs:element ref="ss:absService"/> |
+ <!-- TIP-TRI --> |
+ <xs:element ref="ss:terminating-identity-presentation-restriction"/> |
+ <xs:element ref="ss:terminating-identity-presentation"/> |
+ <!-- OIP-OIR --> |
+ <xs:element ref="ss:originating--identity--presentation--restriction"/> |
+ <xs:element ref="ss:originating--identity--presentation"/> |
+ <!-- CDIV --> |
+ <xs:element ref="ss:communication-diversion"/> |
+ <!-- ACR-CB --> |
+ <xs:element ref="ss:incoming-communication-barring"/> |
+ <xs:element ref="ss:outgoing-communication-barring"/> |
+ <!-- CUG --> |
+ <!-- <xs:element ref="cug"/> --> |
+ </xs:choice> |
+ </xs:group> |
+ |
+</xs:schema> |
\ No newline at end of file |
/v2.0.0/xsd/simservs.xsd |
---|
Property changes: |
Added: svn:keywords |
## -0,0 +1 ## |
+LastChangedDate |
\ No newline at end of property |
Index: v2.0.0/xsd/cw.xsd |
=================================================================== |
--- v2.0.0/xsd/cw.xsd (nonexistent) |
+++ v2.0.0/xsd/cw.xsd (revision 552) |
@@ -0,0 +1,16 @@ |
+<?xml version="1.0" encoding="UTF-8"?> |
+<xs:schema targetNamespace="urn:3gpp:ns:cw:1.0" |
+ xmlns:cw10="urn:3gpp:ns:cw:1.0" |
+ xmlns:xs="http://www.w3.org/2001/XMLSchema" |
+ elementFormDefault="qualified" attributeFormDefault="unqualified"> |
+ <xs:complexType name="tEmptyType"/> |
+ <xs:complexType name="tCWtype"> |
+ <xs:sequence> |
+ <xs:element name="communication-waiting-indication" minOccurs="0" maxOccurs="1" |
+ type="cw10:tEmptyType"/> |
+ <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ <xs:anyAttribute namespace="##other" processContents="lax"/> |
+ </xs:complexType> |
+ <xs:element name="ims-cw" type="cw10:tCWtype"/> |
+</xs:schema> |
\ No newline at end of file |
Index: v2.0.0/xsd/xml.xsd |
=================================================================== |
--- v2.0.0/xsd/xml.xsd (nonexistent) |
+++ v2.0.0/xsd/xml.xsd (revision 552) |
@@ -0,0 +1,38 @@ |
+<xs:schema targetNamespace="http://www.w3.org/XML/1998/namespace" |
+ xmlns:xs="http://www.w3.org/2001/XMLSchema" |
+ xml:lang="en"> |
+ |
+ <xs:attribute name="lang"> |
+ <xs:simpleType> |
+ <xs:union memberTypes="xs:language"> |
+ <xs:simpleType> |
+ <xs:restriction base="xs:string"> |
+ <xs:enumeration value=""/> |
+ </xs:restriction> |
+ </xs:simpleType> |
+ </xs:union> |
+ </xs:simpleType> |
+ </xs:attribute> |
+ |
+ <xs:attribute name="space"> |
+ <xs:simpleType> |
+ <xs:restriction base="xs:NCName"> |
+ <xs:enumeration value="default"/> |
+ <xs:enumeration value="preserve"/> |
+ </xs:restriction> |
+ </xs:simpleType> |
+ </xs:attribute> |
+ |
+ <xs:attribute name="base" type="xs:anyURI"> |
+ </xs:attribute> |
+ |
+ <xs:attribute name="id" type="xs:ID"> |
+ </xs:attribute> |
+ |
+ <xs:attributeGroup name="specialAttrs"> |
+ <xs:attribute ref="xml:base"/> |
+ <xs:attribute ref="xml:lang"/> |
+ <xs:attribute ref="xml:space"/> |
+ <xs:attribute ref="xml:id"/> |
+ </xs:attributeGroup> |
+</xs:schema> |
Index: v2.0.0/xsd/Ims3gpp.xsd |
=================================================================== |
--- v2.0.0/xsd/Ims3gpp.xsd (nonexistent) |
+++ v2.0.0/xsd/Ims3gpp.xsd (revision 552) |
@@ -0,0 +1,60 @@ |
+<?xml version="1.0" encoding="UTF-8"?> |
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1"> |
+ <xs:complexType name="tIMS3GPP"> |
+ <xs:sequence> |
+ <xs:choice> |
+ <xs:element name="alternative-service" type="tAlternativeService"/> |
+ <xs:element name="service-info" type="xs:string"/> |
+ </xs:choice> |
+ <xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ <xs:attribute name="version" type="xs:decimal" use="required"/> |
+ <xs:anyAttribute/> |
+ </xs:complexType> |
+ <xs:complexType name="tAlternativeService"> |
+ <xs:sequence> |
+ <xs:element name="type" type="tType"/> |
+ <xs:element name="reason" type="xs:string"/> |
+ <xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ <xs:anyAttribute/> |
+ </xs:complexType> |
+ <xs:complexType name="tType"> |
+ <xs:sequence> |
+ <xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ <xs:anyAttribute/> |
+ </xs:complexType> |
+ <xs:complexType name="tAction"> |
+ <xs:sequence> |
+ <xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ <xs:anyAttribute/> |
+ </xs:complexType> |
+ |
+ <!-- root element --> |
+ <xs:element name="ims-3gpp" type="tIMS3GPP"/> |
+ |
+ <!-- emergency element for //ims-3gpp//alternative-service//type --> |
+ <xs:element name="emergency"> |
+ <xs:complexType/> |
+ </xs:element> |
+ |
+ <!-- restoration element for //ims-3gpp//alternative-service//type --> |
+ <xs:element name="restoration"> |
+ <xs:complexType/> |
+ </xs:element> |
+ |
+ <!-- action element for //ims-3gpp//alternative-service --> |
+ <xs:element name="action" type="tAction"/> |
+ |
+ <!-- emergency-registration element for //ims-3gpp//alternative-service//action --> |
+ <xs:element name="emergency-registration"> |
+ <xs:complexType/> |
+ </xs:element> |
+ |
+ <!-- initial-registration element for //ims-3gpp//alternative-service//action --> |
+ <xs:element name="initial-registration"> |
+ <xs:complexType/> |
+ </xs:element> |
+</xs:schema> |
/v2.0.0/xsd/Ims3gpp.xsd |
---|
Property changes: |
Added: svn:keywords |
## -0,0 +1 ## |
+LastChangedDate |
\ No newline at end of property |
Index: v2.0.0/xsd/ACR_CB.xsd |
=================================================================== |
--- v2.0.0/xsd/ACR_CB.xsd (nonexistent) |
+++ v2.0.0/xsd/ACR_CB.xsd (revision 552) |
@@ -0,0 +1,54 @@ |
+ |
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" |
+xmlns:ss="http://uri.etsi.org/ngn/params/xml/simservs/xcap" xmlns:cp="urn:ietf:params:xml:ns:common-policy" |
+xmlns:ocp="urn:oma:xml:xdm:common-policy" |
+targetNamespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" elementFormDefault="qualified" |
+attributeFormDefault="unqualified"> |
+<!-- import common policy definitions --> |
+<xs:import namespace="urn:ietf:params:xml:ns:common-policy" schemaLocation="common-policy.xsd"/> |
+<!-- import OMA common policy extensions --> |
+<xs:import namespace="urn:oma:xml:xdm:common-policy" schemaLocation="xdm_commonPolicy-v1_0.xsd"/> |
+<!-- incoming communication barring rule set based on the common policy rule set.--> |
+<xs:element name="incoming-communication-barring" substitutionGroup="ss:absService"> |
+<xs:annotation> |
+<xs:documentation>This is the incoming communication barring configuration |
+document.</xs:documentation> |
+</xs:annotation> |
+<xs:complexType> |
+<xs:complexContent> |
+<xs:extension base="ss:simservType"> |
+<xs:sequence> |
+<!-- add service specific elements here--> |
+<xs:element ref="cp:ruleset" minOccurs="0"/> |
+</xs:sequence> |
+</xs:extension> |
+<!-- service specific attributes can be defined here --> |
+</xs:complexContent> |
+</xs:complexType> |
+</xs:element> |
+<!-- outgoing communication barring rule set based on the common policy rule set.--> |
+<xs:element name="outgoing-communication-barring" substitutionGroup="ss:absService"> |
+<xs:annotation> |
+<xs:documentation>This is the outgoing communication barring configuration |
+document.</xs:documentation> |
+</xs:annotation> |
+<xs:complexType> |
+<xs:complexContent> |
+<xs:extension base="ss:simservType"> |
+<xs:sequence> |
+<!-- add service specific elements here--> |
+<xs:element ref="cp:ruleset" minOccurs="0"/> |
+</xs:sequence> |
+</xs:extension> |
+<!-- service specific attributes can be defined here --> |
+</xs:complexContent> |
+</xs:complexType> |
+</xs:element> |
+<!-- communication barring specific extensions to IETF common policy actions--> |
+<xs:element name="allow" type="ss:allow-action-type"/> |
+<!-- communication barring specific type declarations --> |
+<!-- <xs:simpleType name="allow-action-type" final="list restriction"> --> |
+<xs:simpleType name="allow-action-type"> |
+<xs:restriction base="xs:boolean"/> |
+</xs:simpleType> |
+</xs:schema> |
\ No newline at end of file |
/v2.0.0/xsd/ACR_CB.xsd |
---|
Property changes: |
Added: svn:keywords |
## -0,0 +1 ## |
+LastChangedDate |
\ No newline at end of property |
Index: v2.0.0/xsd/MCID.xsd |
=================================================================== |
--- v2.0.0/xsd/MCID.xsd (nonexistent) |
+++ v2.0.0/xsd/MCID.xsd (revision 552) |
@@ -0,0 +1,37 @@ |
+ |
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" |
+xmlns="http://uri.etsi.org/ngn/params/xml/simservs/mcid" |
+targetNamespace="http://uri.etsi.org/ngn/params/xml/simservs/mcid" elementFormDefault="qualified"> |
+<xs:annotation> |
+<xs:documentation>XML Schema Definition to the mcid request-response to the Malicious Communication |
+Identification simulation service</xs:documentation> |
+</xs:annotation> |
+<!--Definition of simple types--> |
+<xs:simpleType name="bitType"> |
+<xs:restriction base="xs:string"> |
+<xs:pattern value="[0-1]"/> |
+</xs:restriction> |
+</xs:simpleType> |
+<!--Definition of complex types--> |
+<xs:complexType name="requestType"> |
+<xs:sequence> |
+<xs:element name="McidRequestIndicator" type="bitType"/> |
+<xs:element name="HoldingIndicator" type="bitType"/> |
+</xs:sequence> |
+</xs:complexType> |
+<xs:complexType name="responseType"> |
+<xs:sequence> |
+<xs:element name="McidResponseIndicator" type="bitType"/> |
+<xs:element name="HoldingProvidedIndicator" type="bitType"/> |
+</xs:sequence> |
+</xs:complexType> |
+<!--Definition of document structure--> |
+<xs:element name="mcid"> |
+<xs:complexType> |
+<xs:choice> |
+<xs:element name="request" type="requestType"/> |
+<xs:element name="response" type="responseType"/> |
+</xs:choice> |
+</xs:complexType> |
+</xs:element> |
+</xs:schema> |
\ No newline at end of file |
/v2.0.0/xsd/MCID.xsd |
---|
Property changes: |
Added: svn:keywords |
## -0,0 +1 ## |
+LastChangedDate |
\ No newline at end of property |
Index: v2.0.0/xsd/OIP-OIR.xsd |
=================================================================== |
--- v2.0.0/xsd/OIP-OIR.xsd (nonexistent) |
+++ v2.0.0/xsd/OIP-OIR.xsd (revision 552) |
@@ -0,0 +1,37 @@ |
+ |
+<xs:schema xmlns:ss="http://uri.etsi.org/ngn/params/xml/simservs/xcap" |
+xmlns:xs="http://www.w3.org/2001/XMLSchema" |
+targetNamespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" elementFormDefault="qualified" |
+attributeFormDefault="unqualified"> |
+<xs:element name="originating--identity--presentation--restriction" |
+substitutionGroup="ss:absService"> |
+<xs:annotation> |
+<xs:documentation>Originating Identity presentation Restriction |
+</xs:documentation> |
+</xs:annotation> |
+<xs:complexType> |
+<xs:complexContent> |
+<xs:extension base="ss:simservType"> |
+<xs:sequence> |
+<xs:element name="default--behaviour" default="presentation--restricted" |
+minOccurs="0"> |
+<xs:simpleType> |
+<xs:restriction base="xs:string"> |
+<xs:enumeration value="presentation--restricted"/> |
+<xs:enumeration value="presentation--not--restricted"/> |
+</xs:restriction> |
+</xs:simpleType> |
+</xs:element> |
+</xs:sequence> |
+</xs:extension> |
+</xs:complexContent> |
+</xs:complexType> |
+</xs:element> |
+<xs:element name="originating--identity--presentation" type="ss:simservType" |
+substitutionGroup="ss:absService"> |
+<xs:annotation> |
+<xs:documentation>Originating Identity Presentation |
+</xs:documentation> |
+</xs:annotation> |
+</xs:element> |
+</xs:schema> |
\ No newline at end of file |
/v2.0.0/xsd/OIP-OIR.xsd |
---|
Property changes: |
Added: svn:keywords |
## -0,0 +1 ## |
+LastChangedDate |
\ No newline at end of property |
Index: v2.0.0/xsd/PSTN.xsd |
=================================================================== |
--- v2.0.0/xsd/PSTN.xsd (nonexistent) |
+++ v2.0.0/xsd/PSTN.xsd (revision 552) |
@@ -0,0 +1,367 @@ |
+<?xml version="1.0" encoding="UTF-8"?> |
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://uri.etsi.org/ngn/params/xml/simservs/pstn" xmlns:ns1="http://uri.etsi.org/ngn/params/xml/simservs/pstn" targetNamespace="http://uri.etsi.org/ngn/params/xml/simservs/pstn" elementFormDefault="qualified"> |
+ <xs:annotation> |
+ <xs:documentation>XML Schema definition for mapping of some PSTN into SIP MIME Bodies</xs:documentation> |
+ </xs:annotation> |
+ <!--Definition of simple types--> |
+ <xs:simpleType name="OneBitType"> |
+ <xs:restriction base="xs:string"> |
+ <xs:pattern value="[0-1]"/> |
+ </xs:restriction> |
+ </xs:simpleType> |
+ <xs:simpleType name="TwoBitType"> |
+ <xs:restriction base="xs:string"> |
+ <xs:pattern value="[0-1][0-1]"/> |
+ </xs:restriction> |
+ </xs:simpleType> |
+ <xs:simpleType name="ThreeBitType"> |
+ <xs:restriction base="xs:string"> |
+ <xs:pattern value="[0-1][0-1][0-1]"/> |
+ </xs:restriction> |
+ </xs:simpleType> |
+ <xs:simpleType name="FourBitType"> |
+ <xs:restriction base="xs:string"> |
+ <xs:pattern value="[0-1][0-1][0-1][0-1]"/> |
+ </xs:restriction> |
+ </xs:simpleType> |
+ <xs:simpleType name="FiveBitType"> |
+ <xs:restriction base="xs:string"> |
+ <xs:pattern value="[0-1][0-1][0-1][0-1][0-1]"/> |
+ </xs:restriction> |
+ </xs:simpleType> |
+ <xs:simpleType name="SixBitType"> |
+ <xs:restriction base="xs:string"> |
+ <xs:pattern value="[0-1][0-1][0-1][0-1][0-1][0-1]"/> |
+ </xs:restriction> |
+ </xs:simpleType> |
+ <xs:simpleType name="SevenBitType"> |
+ <xs:restriction base="xs:string"> |
+ <xs:pattern value="[0-1][0-1][0-1][0-1][0-1][0-1][0-1]"/> |
+ </xs:restriction> |
+ </xs:simpleType> |
+ <!--Definition of complex types--> |
+ <!--Definition of BearerCapability Octets--> |
+ <xs:complexType name="BCOctet3Type"> |
+ <xs:sequence> |
+ <xs:element name="CodingStandard" type="TwoBitType"/> |
+ <xs:element name="InformationTransferCabability" type="FiveBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="BCOctet4Type"> |
+ <xs:sequence> |
+ <xs:element name="TransferMode" type="TwoBitType"/> |
+ <xs:element name="InformationTransferRate" type="FiveBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="BCOctet4-1Type"> |
+ <xs:sequence> |
+ <xs:element name="RateMultiplier" type="SevenBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="BCOctet5Type"> |
+ <xs:sequence> |
+ <xs:element name="Layer1Identification" type="TwoBitType"/> |
+ <xs:element name="UserInfoLayer1Protocol" type="FiveBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="BCOctet5aType"> |
+ <xs:sequence> |
+ <xs:element name="SynchronousAsynchronous" type="OneBitType"/> |
+ <xs:element name="Negotiation" type="OneBitType"/> |
+ <xs:element name="UserRate" type="FiveBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="BCOctet5bV110Type"> |
+ <xs:sequence> |
+ <xs:element name="IntermediateRate" type="TwoBitType"/> |
+ <xs:element name="NIConTX" type="OneBitType"/> |
+ <xs:element name="NIConRX" type="OneBitType"/> |
+ <xs:element name="FlowControlOnTX" type="OneBitType"/> |
+ <xs:element name="FlowControlOnRX" type="OneBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="BCOctet5bV120Type"> |
+ <xs:sequence> |
+ <xs:element name="RateAdaptionHeader" type="OneBitType"/> |
+ <xs:element name="MultipleFrameEstablishmentSupport" type="OneBitType"/> |
+ <xs:element name="ModeOfOperation" type="OneBitType"/> |
+ <xs:element name="LogicalLinkIdentifier" type="OneBitType"/> |
+ <xs:element name="Assignor" type="OneBitType"/> |
+ <xs:element name="InbandOutbandNegotiation" type="OneBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="BCOctet5cType"> |
+ <xs:sequence> |
+ <xs:element name="NumberOfStopBits" type="TwoBitType"/> |
+ <xs:element name="NumberOfDataBits" type="TwoBitType"/> |
+ <xs:element name="Parity" type="ThreeBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="BCOctet5dType"> |
+ <xs:sequence> |
+ <xs:element name="DuplexMode" type="OneBitType"/> |
+ <xs:element name="ModemType" type="SixBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="BCOctet6Type"> |
+ <xs:sequence> |
+ <xs:element name="Layer2Identification" type="TwoBitType"/> |
+ <xs:element name="UserInfoLayer2Protocol" type="FiveBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="BCOctet7Type"> |
+ <xs:sequence> |
+ <xs:element name="Layer3Identification" type="TwoBitType"/> |
+ <xs:element name="UserInfoLayer3Protocol" type="FiveBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="BCOctet7aType"> |
+ <xs:sequence> |
+ <xs:element name="AdditionalLayer3Info" type="FourBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="BCOctet7bType"> |
+ <xs:sequence> |
+ <xs:element name="AdditionalLayer3Info" type="FourBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <!--Definition of High Layer Compatibility Octets--> |
+ <xs:complexType name="HLOctet3Type"> |
+ <xs:sequence> |
+ <xs:element name="CodingStandard" type="TwoBitType"/> |
+ <xs:element name="Interpretation" type="ThreeBitType"/> |
+ <xs:element name="PresentationMethod" type="TwoBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="HLOctet4Type"> |
+ <xs:sequence> |
+ <xs:element name="HighLayerCharacteristics" type="SevenBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="HLOctet4aMaintenanceType"> |
+ <xs:sequence> |
+ <xs:element name="HighLayerCharacteristics" type="SevenBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="HLOctet4aAudioType"> |
+ <xs:sequence> |
+ <xs:element name="VideoTelephonyCharacteristics" type="SevenBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <!--Definition of Low Layer Compatibility Octets--> |
+ <xs:complexType name="LLOctet3Type"> |
+ <xs:sequence> |
+ <xs:element name="CodingStandard" type="TwoBitType"/> |
+ <xs:element name="InformationTransferCapability" type="FiveBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="LLOctet3aType"> |
+ <xs:sequence> |
+ <xs:element name="NegotiationIndicator" type="OneBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="LLOctet4Type"> |
+ <xs:sequence> |
+ <xs:element name="TransferMode" type="TwoBitType"/> |
+ <xs:element name="InformationTransferRate" type="FiveBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="LLOctet4-1Type"> |
+ <xs:sequence> |
+ <xs:element name="RateMultiplier" type="SevenBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="LLOctet5Type"> |
+ <xs:sequence> |
+ <xs:element name="Layer1Identification" type="TwoBitType"/> |
+ <xs:element name="UserInfoLayer1Protocol" type="FiveBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="LLOctet5aType"> |
+ <xs:sequence> |
+ <xs:element name="SynchronousAsynchronous" type="OneBitType"/> |
+ <xs:element name="Negotiation" type="OneBitType"/> |
+ <xs:element name="UserRate" type="FiveBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="LLOctet5bV110Type"> |
+ <xs:sequence> |
+ <xs:element name="IntermediateRate" type="TwoBitType"/> |
+ <xs:element name="NIConTX" type="OneBitType"/> |
+ <xs:element name="NIConRX" type="OneBitType"/> |
+ <xs:element name="FlowControlOnTX" type="OneBitType"/> |
+ <xs:element name="FlowControlOnRX" type="OneBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="LLOctet5bV120Type"> |
+ <xs:sequence> |
+ <xs:element name="RateAdaptionHeader" type="OneBitType"/> |
+ <xs:element name="MultipleFrameEstablishmentSupport" type="OneBitType"/> |
+ <xs:element name="ModeOfOperation" type="OneBitType"/> |
+ <xs:element name="LogicalLinkIdentifier" type="OneBitType"/> |
+ <xs:element name="Assignor" type="OneBitType"/> |
+ <xs:element name="InbandOutbandNegotiation" type="OneBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="LLOctet5cType"> |
+ <xs:sequence> |
+ <xs:element name="NumberOfStopBits" type="TwoBitType"/> |
+ <xs:element name="NumberOfDataBits" type="TwoBitType"/> |
+ <xs:element name="Parity" type="ThreeBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="LLOctet5dType"> |
+ <xs:sequence> |
+ <xs:element name="DuplexMode" type="OneBitType"/> |
+ <xs:element name="ModemType" type="SixBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="LLOctet6Type"> |
+ <xs:sequence> |
+ <xs:element name="Layer2Identification" type="TwoBitType"/> |
+ <xs:element name="UserInfoLayer2Protocol" type="FiveBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="LLOctet6aHDLCType"> |
+ <xs:sequence> |
+ <xs:element name="Mode" type="TwoBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="LLOctet6aUserSpecificType"> |
+ <xs:sequence> |
+ <xs:element name="UserSpecificLayer2Information" type="SevenBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="LLOctet6bType"> |
+ <xs:sequence> |
+ <xs:element name="WindowSize" type="SevenBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="LLOctet7Type"> |
+ <xs:sequence> |
+ <xs:element name="Layer3Identification" type="TwoBitType"/> |
+ <xs:element name="UserInfoLayer3Protocol" type="FiveBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="LLOctet7aUserSpecificType"> |
+ <xs:sequence> |
+ <xs:element name="OptionalLayer3Information" type="SevenBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="LLOctet7aX25Type"> |
+ <xs:sequence> |
+ <xs:element name="Mode" type="TwoBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="LLOctet7bX25Type"> |
+ <xs:sequence> |
+ <xs:element name="DefaultPacketSize" type="FourBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="LLOctet7cType"> |
+ <xs:sequence> |
+ <xs:element name="PacketWindowSize" type="SevenBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="LLOctet7aTR9577Type"> |
+ <xs:sequence> |
+ <xs:element name="AdditionalLayer3Info" type="FourBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="LLOctet7bTR9577Type"> |
+ <xs:sequence> |
+ <xs:element name="AdditionalLayer3Info" type="FourBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="DispOctet3Type"> |
+ <xs:sequence> |
+ <xs:element name="DisplayInformation" type="SevenBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <!--Definition of the information elements--> |
+ <xs:complexType name="BearerCapabilityType"> |
+ <xs:sequence> |
+ <xs:element name="BCoctet3" type="BCOctet3Type"/> |
+ <xs:element name="BCoctet4" type="BCOctet4Type"/> |
+ <xs:element name="BCoctet4-1" type="BCOctet4-1Type" minOccurs="0"/> |
+ <xs:element name="BCoctet5" type="BCOctet5Type" minOccurs="0"/> |
+ <xs:element name="BCoctet5a" type="BCOctet5aType" minOccurs="0"/> |
+ <xs:element name="BCoctet5bV110" type="BCOctet5bV110Type" minOccurs="0"/> |
+ <xs:element name="BCoctet5bV120" type="BCOctet5bV120Type" minOccurs="0"/> |
+ <xs:element name="BCoctet5c" type="BCOctet5cType" minOccurs="0"/> |
+ <xs:element name="BCoctet5d" type="BCOctet5dType" minOccurs="0"/> |
+ <xs:element name="BCoctet6" type="BCOctet6Type" minOccurs="0"/> |
+ <xs:element name="BCoctet7" type="BCOctet7Type" minOccurs="0"/> |
+ <xs:element name="BCoctet7a" type="BCOctet7aType" minOccurs="0"/> |
+ <xs:element name="BCoctet7b" type="BCOctet7bType" minOccurs="0"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="HighLayerCompatibilityType"> |
+ <xs:sequence> |
+ <xs:element name="HLOctet3" type="HLOctet3Type"/> |
+ <xs:element name="HLOctet4" type="HLOctet4Type"/> |
+ <xs:element name="HLOctet4aMaintenance" type="HLOctet4aMaintenanceType" minOccurs="0"/> |
+ <xs:element name="HLOctet4Audio" type="HLOctet4aAudioType" minOccurs="0"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="LowLayerCompatibilityType"> |
+ <xs:sequence> |
+ <xs:element name="LLOctet3" type="LLOctet3Type"/> |
+ <xs:element name="LLOctet3a" type="LLOctet3aType" minOccurs="0"/> |
+ <xs:element name="LLOctet4" type="LLOctet4Type"/> |
+ <xs:element name="LLOctet4-1" type="LLOctet4-1Type" minOccurs="0"/> |
+ <xs:element name="LLOctet5" type="LLOctet5Type" minOccurs="0"/> |
+ <xs:element name="LLOctet5a" type="LLOctet5aType" minOccurs="0"/> |
+ <xs:element name="LLOctet5bV110" type="LLOctet5bV110Type" minOccurs="0"/> |
+ <xs:element name="LLOctet5bV120" type="LLOctet5bV120Type" minOccurs="0"/> |
+ <xs:element name="LLOctet5c" type="LLOctet5cType" minOccurs="0"/> |
+ <xs:element name="LLOctet5d" type="LLOctet5dType" minOccurs="0"/> |
+ <xs:element name="LLOctet6" type="LLOctet6Type" minOccurs="0"/> |
+ <xs:element name="LLOctet6aHDLC" type="LLOctet6aHDLCType" minOccurs="0"/> |
+ <xs:element name="LLOctet6aUserSpecific" type="LLOctet6aUserSpecificType" minOccurs="0"/> |
+ <xs:element name="LLOctet6b" type="LLOctet6bType" minOccurs="0"/> |
+ <xs:element name="LLOctet7" type="LLOctet7Type"/> |
+ <xs:element name="LLOctet7aUserSpecific" type="LLOctet7aUserSpecificType" minOccurs="0"/> |
+ <xs:element name="LLOctet7aX25" type="LLOctet7aX25Type" minOccurs="0"/> |
+ <xs:element name="LLOctet7bX25" type="LLOctet7bX25Type" minOccurs="0"/> |
+ <xs:element name="LLOctet7c" type="LLOctet7cType" minOccurs="0"/> |
+ <xs:element name="LLOctet7aTR9577" type="LLOctet7aTR9577Type" minOccurs="0"/> |
+ <xs:element name="LLOctet7bTR9577" type="LLOctet7bTR9577Type" minOccurs="0"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="DisplayType"> |
+ <xs:sequence> |
+ <xs:element name="DispOctet3" type="DispOctet3Type"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <!--Definition of progress indicator--> |
+ <xs:complexType name="ProgressOctet3Type"> |
+ <xs:sequence> |
+ <xs:element name="CodingStandard" type="TwoBitType"/> |
+ <xs:element name="Location" type="FourBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="ProgressOctet4Type"> |
+ <xs:sequence> |
+ <xs:element name="ProgressDescription" type="SevenBitType"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <xs:complexType name="ProgressIndicatorType"> |
+ <xs:sequence> |
+ <xs:element name="ProgressOctet3" type="ProgressOctet3Type"/> |
+ <xs:element name="ProgressOctet4" type="ProgressOctet4Type"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ <!--Definition of document structure--> |
+ <xs:element name="PSTN-transit"> |
+ <xs:complexType> |
+ <xs:sequence> |
+ <xs:element name="BearerInfomationElement" type="BearerCapabilityType" maxOccurs="2"/> |
+ <xs:element name="HighLayerCompatibility" type="HighLayerCompatibilityType" minOccurs="0" maxOccurs="2"/> |
+ <xs:element name="LowLayerCompatibility" type="LowLayerCompatibilityType" minOccurs="0"/> |
+ <xs:element name="ProgressIndicator" type="ProgressIndicatorType" minOccurs="0" maxOccurs="unbounded"/> |
+ <xs:element name="Display" type="DisplayType" minOccurs="0" maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ </xs:element> |
+</xs:schema> |
/v2.0.0/xsd/PSTN.xsd |
---|
Property changes: |
Added: svn:keywords |
## -0,0 +1 ## |
+LastChangedDate |
\ No newline at end of property |
Index: v2.0.0/xsd/SupplementaryServices.xsd |
=================================================================== |
--- v2.0.0/xsd/SupplementaryServices.xsd (nonexistent) |
+++ v2.0.0/xsd/SupplementaryServices.xsd (revision 552) |
@@ -0,0 +1,15 @@ |
+ |
+<xs:schema targetNamespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" |
+ xmlns:ss="http://uri.etsi.org/ngn/params/xml/simservs/xcap" |
+ xmlns:xs="http://www.w3.org/2001/XMLSchema" |
+ elementFormDefault="qualified" |
+ attributeFormDefault="unqualified"> |
+ |
+ <xs:include schemaLocation="simservs.xsd"/> |
+ <xs:include schemaLocation="TIP-TIR.xsd"/> |
+ <xs:include schemaLocation="OIP-OIR.xsd"/> |
+ <xs:include schemaLocation="CDIV.xsd"/> |
+ <xs:include schemaLocation="ACR_CB.xsd"/> |
+ <xs:include schemaLocation="cug.xsd"/> |
+ |
+</xs:schema> |
\ No newline at end of file |
/v2.0.0/xsd/SupplementaryServices.xsd |
---|
Property changes: |
Added: svn:keywords |
## -0,0 +1 ## |
+LastChangedDate |
\ No newline at end of property |
Index: v2.0.0/xsd/TIP-TIR.xsd |
=================================================================== |
--- v2.0.0/xsd/TIP-TIR.xsd (nonexistent) |
+++ v2.0.0/xsd/TIP-TIR.xsd (revision 552) |
@@ -0,0 +1,37 @@ |
+ |
+<xs:schema xmlns:ss="http://uri.etsi.org/ngn/params/xml/simservs/xcap" |
+xmlns:xs="http://www.w3.org/2001/XMLSchema" |
+targetNamespace="http://uri.etsi.org/ngn/params/xml/simservs/xcap" elementFormDefault="qualified" |
+attributeFormDefault="unqualified"> |
+<xs:element name="terminating-identity-presentation-restriction" |
+substitutionGroup="ss:absService"> |
+<xs:annotation> |
+<xs:documentation>Terminating Identity presentation Restriction |
+</xs:documentation> |
+</xs:annotation> |
+<xs:complexType> |
+<xs:complexContent> |
+<xs:extension base="ss:simservType"> |
+<xs:sequence> |
+<xs:element name="default-behaviour" default="presentation-restricted" |
+minOccurs="0"> |
+<xs:simpleType> |
+<xs:restriction base="xs:string"> |
+<xs:enumeration value="presentation-restricted"/> |
+<xs:enumeration value="presentation-not-restricted"/> |
+</xs:restriction> |
+</xs:simpleType> |
+</xs:element> |
+</xs:sequence> |
+</xs:extension> |
+</xs:complexContent> |
+</xs:complexType> |
+</xs:element> |
+<xs:element name="terminating-identity-presentation" type="ss:simservType" |
+substitutionGroup="ss:absService"> |
+<xs:annotation> |
+<xs:documentation>Terminating Identity Presentation |
+</xs:documentation> |
+</xs:annotation> |
+</xs:element> |
+</xs:schema> |
\ No newline at end of file |
/v2.0.0/xsd/TIP-TIR.xsd |
---|
Property changes: |
Added: svn:keywords |
## -0,0 +1 ## |
+LastChangedDate |
\ No newline at end of property |
Index: v2.0.0/xsd/common-policy.xsd |
=================================================================== |
--- v2.0.0/xsd/common-policy.xsd (nonexistent) |
+++ v2.0.0/xsd/common-policy.xsd (revision 552) |
@@ -0,0 +1,127 @@ |
+<?xml version="1.0"?> |
+<xs:schema targetNamespace="urn:ietf:params:xml:ns:common-policy" |
+ xmlns:cp="urn:ietf:params:xml:ns:common-policy" |
+ xmlns:xs="http://www.w3.org/2001/XMLSchema" |
+ elementFormDefault="qualified" attributeFormDefault="unqualified"> |
+ <!-- /ruleset --> |
+ <xs:element name="ruleset"> |
+ <xs:complexType> |
+ <xs:complexContent> |
+ <xs:restriction base="xs:anyType"> |
+ <xs:sequence> |
+ <xs:element name="rule" type="cp:ruleType" |
+ minOccurs="0" maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ </xs:restriction> |
+ </xs:complexContent> |
+ </xs:complexType> |
+ </xs:element> |
+ <!-- /ruleset/rule --> |
+ <xs:complexType name="ruleType"> |
+ <xs:complexContent> |
+ <xs:restriction base="xs:anyType"> |
+ <xs:sequence> |
+ <xs:element name="conditions" |
+ type="cp:conditionsType" minOccurs="0"/> |
+ <xs:element name="actions" |
+ type="cp:extensibleType" minOccurs="0"/> |
+ <xs:element name="transformations" |
+ type="cp:extensibleType" minOccurs="0"/> |
+ </xs:sequence> |
+ <xs:attribute name="id" type="xs:ID" use="required"/> |
+ </xs:restriction> |
+ </xs:complexContent> |
+ </xs:complexType> |
+ <!-- //rule/conditions --> |
+ <xs:complexType name="conditionsType"> |
+ <xs:complexContent> |
+ <xs:restriction base="xs:anyType"> |
+ <xs:choice maxOccurs="unbounded"> |
+ <xs:element name="identity" |
+ type="cp:identityType" minOccurs="0"/> |
+ <xs:element name="sphere" |
+ type="cp:sphereType" minOccurs="0"/> |
+ <xs:element name="validity" |
+ type="cp:validityType" minOccurs="0"/> |
+ <xs:any namespace="##other" processContents="lax" |
+ minOccurs="0" maxOccurs="unbounded"/> |
+ </xs:choice> |
+ </xs:restriction> |
+ </xs:complexContent> |
+ </xs:complexType> |
+ <!-- //conditions/identity --> |
+ <xs:complexType name="identityType"> |
+ <xs:complexContent> |
+ <xs:restriction base="xs:anyType"> |
+ <xs:choice minOccurs="1" maxOccurs="unbounded"> |
+ <xs:element name="one" type="cp:oneType"/> |
+ <xs:element name="many" type="cp:manyType"/> |
+ <xs:any namespace="##other" processContents="lax"/> |
+ </xs:choice> |
+ </xs:restriction> |
+ </xs:complexContent> |
+ </xs:complexType> |
+ <!-- //identity/one --> |
+ <xs:complexType name="oneType"> |
+ <xs:complexContent> |
+ <xs:restriction base="xs:anyType"> |
+ <xs:sequence> |
+ <xs:any namespace="##other" |
+ minOccurs="0" processContents="lax"/> |
+ </xs:sequence> |
+ <xs:attribute name="id" |
+ type="xs:anyURI" use="required"/> |
+ </xs:restriction> |
+ </xs:complexContent> |
+ </xs:complexType> |
+ <!-- //identity/many --> |
+ <xs:complexType name="manyType"> |
+ <xs:complexContent> |
+ <xs:restriction base="xs:anyType"> |
+ <xs:choice minOccurs="0" maxOccurs="unbounded"> |
+ <xs:element name="except" type="cp:exceptType"/> |
+ <xs:any namespace="##other" |
+ minOccurs="0" processContents="lax"/> |
+ </xs:choice> |
+ <xs:attribute name="domain" |
+ use="optional" type="xs:string"/> |
+ </xs:restriction> |
+ </xs:complexContent> |
+ </xs:complexType> |
+ <!-- //many/except --> |
+<xs:complexType name="exceptType"> |
+ <xs:attribute name="domain" type="xs:string" use="optional"/> |
+ <xs:attribute name="id" type="xs:anyURI" use="optional"/> |
+ </xs:complexType> |
+ <!-- //conditions/sphere --> |
+ <xs:complexType name="sphereType"> |
+ <xs:complexContent> |
+ <xs:restriction base="xs:anyType"> |
+ <xs:attribute name="value" |
+ type="xs:string" use="required"/> |
+ </xs:restriction> |
+ </xs:complexContent> |
+ </xs:complexType> |
+ <!-- //conditions/validity --> |
+ <xs:complexType name="validityType"> |
+ <xs:complexContent> |
+ <xs:restriction base="xs:anyType"> |
+ <xs:sequence minOccurs="1" maxOccurs="unbounded"> |
+ <xs:element name="from" type="xs:dateTime"/> |
+ <xs:element name="until" type="xs:dateTime"/> |
+ </xs:sequence> |
+ </xs:restriction> |
+ </xs:complexContent> |
+ </xs:complexType> |
+ <!-- //rule/actions or //rule/transformations --> |
+ <xs:complexType name="extensibleType"> |
+ <xs:complexContent> |
+ <xs:restriction base="xs:anyType"> |
+ <xs:sequence> |
+ <xs:any namespace="##other" processContents="lax" |
+ minOccurs="0" maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ </xs:restriction> |
+ </xs:complexContent> |
+ </xs:complexType> |
+</xs:schema> |
/v2.0.0/xsd/common-policy.xsd |
---|
Property changes: |
Added: svn:keywords |
## -0,0 +1 ## |
+LastChangedDate |
\ No newline at end of property |
Index: v2.0.0/xsd/xdm_commonPolicy-v1_0.xsd |
=================================================================== |
--- v2.0.0/xsd/xdm_commonPolicy-v1_0.xsd (nonexistent) |
+++ v2.0.0/xsd/xdm_commonPolicy-v1_0.xsd (revision 552) |
@@ -0,0 +1,107 @@ |
+<?xml version="1.0" encoding="UTF-8"?> |
+ |
+<!-- |
+ XDM - Common Policy |
+ version - 1.0 |
+ date - 27 Jun 2008 |
+ |
+ FILE INFORMATION |
+ |
+ OMA Permanent Document |
+ File: OMA-SUP-XSD_xdm_commonPolicy-V1_0_2-20080627-A |
+ Type: Text - Schema Description |
+ |
+ Public Reachable Information |
+ Path: http://www.openmobilealliance.org/tech/profiles |
+ Name: xdm_commonPolicy-v1_0.xsd |
+ |
+ NORMATIVE INFORMATION |
+ |
+ Information about this file can be found in the specification |
+ OMA-TS-XDM_Core-V1_1 |
+ available at http://www.openmobilealliance.org/ |
+ |
+ Send comments to technical-comments@mail.openmobilealliance.org |
+ |
+ LEGAL DISCLAIMER |
+ |
+ Use of this document is subject to all of the terms and conditions |
+ of the Use Agreement located at |
+ http://www.openmobilealliance.org/UseAgreement.html |
+ |
+ You may use this document or any part of the document for internal |
+ or educational purposes only, provided you do not modify, edit or |
+ take out of context the information in this document in any manner. |
+ Information contained in this document may be used, at your sole |
+ risk, for any purposes. |
+ |
+ You may not use this document in any other manner without the prior |
+ written permission of the Open Mobile Alliance. The Open Mobile |
+ Alliance authorizes you to copy this document, provided that you |
+ retain all copyright and other proprietary notices contained in the |
+ original materials on any copies of the materials and that you |
+ comply strictly with these terms. This copyright permission does |
+ not constitute an endorsement of the products or services. The |
+ Open Mobile Alliance assumes no responsibility for errors or |
+ omissions in this document. |
+ |
+ Each Open Mobile Alliance member has agreed to use reasonable |
+ endeavors to inform the Open Mobile Alliance in a timely manner of |
+ Essential IPR as it becomes aware that the Essential IPR is related |
+ to the prepared or published specification. However, the members |
+ do not have an obligation to conduct IPR searches. The declared |
+ Essential IPR is publicly available to members and non-members of |
+ the Open Mobile Alliance and may be found on the "OMA IPR |
+ Declarations" list at http://www.openmobilealliance.org/ipr.html. |
+ The Open Mobile Alliance has not conducted an independent IPR review |
+ of this document and the information contained herein, and makes no |
+ representations or warranties regarding third party IPR, including |
+ without limitation patents, copyrights or trade secret rights. This |
+ document may contain inventions for which you must obtain licenses |
+ from third parties before making, using or selling the inventions. |
+ Defined terms above are set forth in the schedule to the Open Mobile |
+ Alliance Application Form. |
+ |
+ NO REPRESENTATIONS OR WARRANTIES (WHETHER EXPRESS OR IMPLIED) ARE |
+ MADE BY THE OPEN MOBILE ALLIANCE OR ANY OPEN MOBILE ALLIANCE MEMBER |
+ OR ITS AFFILIATES REGARDING ANY OF THE IPR'S REPRESENTED ON THE "OMA |
+ IPR DECLARATIONS" LIST, INCLUDING, BUT NOT LIMITED TO THE ACCURACY, |
+ COMPLETENESS, VALIDITY OR RELEVANCE OF THE INFORMATION OR WHETHER OR |
+ NOT SUCH RIGHTS ARE ESSENTIAL OR NON-ESSENTIAL. |
+ |
+ THE OPEN MOBILE ALLIANCE IS NOT LIABLE FOR AND HEREBY DISCLAIMS ANY |
+ DIRECT, INDIRECT, PUNITIVE, SPECIAL, INCIDENTAL, CONSEQUENTIAL, OR |
+ EXEMPLARY DAMAGES ARISING OUT OF OR IN CONNECTION WITH THE USE OF |
+ DOCUMENTS AND THE INFORMATION CONTAINED IN THE DOCUMENTS. |
+ |
+ Copyright 2008 Open Mobile Alliance Ltd. All Rights Reserved. |
+ Used with the permission of the Open Mobile Alliance Ltd. under the |
+ terms set forth above. |
+--> |
+ |
+<xs:schema targetNamespace="urn:oma:xml:xdm:common-policy" |
+ xmlns="urn:oma:xml:xdm:common-policy" |
+ xmlns:xs="http://www.w3.org/2001/XMLSchema" |
+ elementFormDefault="qualified" attributeFormDefault="unqualified"> |
+ |
+<!-- OMA specific "conditions" child elements --> |
+<xs:element name="other-identity" type="emptyType"/> |
+ |
+ <xs:element name="external-list"> |
+ <xs:complexType> |
+ <xs:sequence> |
+ <xs:element name="entry" type="anchorType" minOccurs="0" maxOccurs="unbounded"/> |
+ </xs:sequence> |
+ </xs:complexType> |
+ </xs:element> |
+ |
+ <xs:element name="anonymous-request" type="emptyType"/> |
+ |
+ <xs:complexType name="anchorType"> |
+ <xs:attribute name="anc" type="xs:anyURI"/> |
+ <xs:anyAttribute processContents="lax"/> |
+ </xs:complexType> |
+ |
+<xs:complexType name="emptyType"/> |
+ |
+</xs:schema> |
/v2.0.0/xsd/xdm_commonPolicy-v1_0.xsd |
---|
Property changes: |
Added: svn:keywords |
## -0,0 +1 ## |
+LastChangedDate |
\ No newline at end of property |