Newer
Older
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 {
//* 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 (isvalue(p_mb.information)) {
v_auxstring := valueof(p_mb.information);
v_result := v_result + 2 + c_CRlen + lengthof(v_auxstring);
} //* "i= "
if (isvalue(p_mb.uri)) {
v_auxstring := valueof(p_mb.uri);
v_result := v_result + 2 + c_CRlen + lengthof(v_auxstring);
} //* "u="
for (var integer i := 0; i < lengthof(p_mb.emails); i := i + 1) {
v_result := v_result + 2 + c_CRlen + lengthof(p_mb.emails[i].addr_or_phone); //* "e="
if (isvalue(p_mb.emails[i].disp_name)) {
v_auxstring := valueof(p_mb.emails[i].disp_name);
v_result := v_result + 1 + lengthof(v_auxstring);
}
}
}
for (var integer i := 0; i < lengthof(p_mb.phone_numbers); i := i + 1) {
v_result := v_result + 2 + c_CRlen + lengthof(p_mb.phone_numbers[i].addr_or_phone); //* "p=
//* "
if (isvalue(p_mb.phone_numbers[i].disp_name)) {
v_auxstring := valueof(p_mb.phone_numbers[i].disp_name);
v_result := v_result + 1 + lengthof(v_auxstring);
}
}
}
if (isvalue(p_mb.connection)) {
var integer v_len_con0 := f_SDPlength_connection(valueof(p_mb.connection));
v_result := v_result + v_len_con0;
} //* "c="
for (var integer i := 0; i < lengthof(p_mb.bandwidth); i := i + 1) {
//* "b= "
v_auxstring := p_mb.bandwidth[i].modifier & " ";
v_result := v_result + 2 + c_CRlen + lengthof(v_auxstring) + lengthof(int2str(p_mb.bandwidth[i].bandwidth));
}
}
for (var integer i := 0; i < lengthof(p_mb.times); i := i + 1) {
v_auxstring := p_mb.times[i].time_field.start_time & " " & p_mb.times[i].time_field.stop_time;
v_result := v_result + 2 + c_CRlen + lengthof(v_auxstring); //* "t="
for (var integer j := 0; j < lengthof(p_mb.times[i].time_repeat); j := j + 1) {
v_result := v_result + 2 + c_CRlen + lengthof(int2str(p_mb.times[i].time_repeat[j].repeat_interval.time)); //* "r="
if (isvalue(p_mb.times[i].time_repeat[j].repeat_interval.unit)) {
v_auxstring := valueof(p_mb.times[i].time_repeat[j].repeat_interval.unit);
v_result := v_result + 1 + lengthof(v_auxstring);
}
v_result := v_result + 1 + lengthof(int2str(p_mb.times[i].time_repeat[j].active.time));
if (isvalue(p_mb.times[i].time_repeat[j].active.unit)) {
v_auxstring := valueof(p_mb.times[i].time_repeat[j].active.unit);
v_result := v_result + 1 + lengthof(v_auxstring);
}
for (var integer k := 0; k < lengthof(p_mb.times[i].time_repeat[j].offsets); k := k + 1) {
v_result := v_result + 1 + lengthof(int2str(p_mb.times[i].time_repeat[j].offsets[k].time));
if (isvalue(p_mb.times[i].time_repeat[j].offsets[k].unit)) {
v_auxstring := valueof(p_mb.times[i].time_repeat[j].offsets[k].unit);
v_result := v_result + 1 + lengthof(v_auxstring);
}
}
}
}
}
log("timezone adjustments have not been considered in SDP length calculation yet");
} //* "z="
v_result := v_result + 2 + c_CRlen + lengthof(p_mb.key.method); //* "k=
//* "
if (isvalue(p_mb.key.key)) {
v_auxstring := valueof(p_mb.key.key);
v_result := v_result + 1 + lengthof(v_auxstring);
}
}
for (var integer i := 0; i < lengthof(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="
for (var integer i := 0; i < lengthof(p_mb.media_list); i := i + 1) {
//* "m= "
//* for each media_field
//* log("p_mb.media_list[i ] ",p_mb.media_list[i
//* ] );
v_result := v_result + 2 + c_CRlen + lengthof(p_mb.media_list[i].media_field.media) + 1 + lengthof(int2str(p_mb.media_list[i].media_field.ports.port_number));
if (isvalue(p_mb.media_list[i].media_field.ports.num_of_ports)) {
v_result := v_result + 1 + lengthof(int2str(valueof(p_mb.media_list[i].media_field.ports.num_of_ports)));
}
v_result := v_result + 1 + lengthof(p_mb.media_list[i].media_field.transport);
for (var integer j := 0; j < lengthof(p_mb.media_list[i].media_field.fmts); j := j + 1) {
v_result := v_result + 1 + lengthof(p_mb.media_list[i].media_field.fmts[j]);
}
if (isvalue(p_mb.media_list[i].information)) {
v_auxstring := valueof(p_mb.media_list[i].information);
v_result := v_result + 2 + c_CRlen + lengthof(v_auxstring); //* "i= "
}
if (isvalue(p_mb.media_list[i].connections)) {
for (var integer j := 0; j < lengthof(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;
if (isvalue(p_mb.media_list[i].bandwidth)) {
//* "b= "
for (var integer j := 0; j < lengthof(p_mb.media_list[i].bandwidth); j := j + 1) {
v_result := v_result + 2 + c_CRlen + lengthof(p_mb.media_list[i].bandwidth[j].modifier) + 1 + lengthof(int2str(p_mb.media_list[i].bandwidth[j].bandwidth));
} //* end for
//* "k= "
v_result := v_result + 1 + lengthof(p_mb.media_list[i].key.method);
if (isvalue(p_mb.media_list[i].key.key)) {
v_auxstring := valueof(p_mb.media_list[i].key.key);
v_result := v_result + 1 + lengthof(v_auxstring);
}
}
if (isvalue(p_mb.media_list[i].attributes)) {
for (var integer j := 0; j < lengthof(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;
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 (isvalue(p_element.conn_addr.ttl) and p_element.conn_addr.ttl > 0) {
v_result := v_result + 1 + lengthof(int2str(valueof(p_element.conn_addr.ttl)));
if (isvalue(p_element.conn_addr.num_of_addr) and p_element.conn_addr.num_of_addr > 0) {
v_result := v_result + 1 + lengthof(int2str(valueof(p_element.conn_addr.num_of_addr)));
}
return v_result;
} //* f_SDPlength_connection
function f_SDPlength_attribute(
SDP_attribute p_element
) return integer {
//* "a="
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
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);
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);
v_result := v_result + 2 + c_CRlen + lengthof("conf:" & p_element.conf.preconditionType & " " & p_element.conf.statusType & " " & p_element.conf.direction);
}
if (ischosen(p_element.rtpmap)) {
v_result := v_result + 2 + c_CRlen + lengthof("rtpmap:" & 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 (isvalue(p_element.unknown.attr_value)) {
var charstring aux := valueof(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);
}
if (ischosen(p_mb.cug)) {
v_result := f_XMLBody_Cug_Length(p_mb.cug);
}
if (ischosen(p_mb.mcid)) {
v_result := f_XMLBody_Mcid_Length(p_mb.mcid);
}
if (ischosen(p_mb.cw)) {
v_result := f_XMLBody_Cw_Length(p_mb.cw);
}
if (ischosen(p_mb.cdivn)) {
v_result := f_XMLBody_Cdivn_Length(p_mb.cdivn);
}
if (ischosen(p_mb.pstnTransit)) {
v_result := f_XMLBody_PSTNTransit_Length(p_mb.pstnTransit);
}
if (ischosen(p_mb.simservs)) {
v_result := f_XMLBody_Simservs_Length(p_mb.simservs);
}
if (ischosen(p_mb.resourceLists)) {
v_result := f_XMLBody_ResourceList_Length(p_mb.resourceLists);
}
if (ischosen(p_mb.ims3gpp)) {
v_result := f_XMLBody_Ims3GPP_Length(p_mb.ims3gpp);
}
/**
* Add aditional checks regarding to new variants, also implement appropriate function for calculation
*/
}
return v_result;
} //* f_XMLBodyLength
group XMLBodies_calculation {
/**
* @desc Calculation of XML ConferenceInfo element length
* @param p_mb contain XML ConfInfo body
* @return xml_length
*/
function f_XMLBody_ConferenceInfo_Length(
template(value) Conference_type p_mb
) return integer {
var integer v_result := lengthof(encvalue(p_mb)) / 8;
return v_result;
} //* f_XMLBody_ConferenceInfo_Length
/**
* @desc Calculation of XML CUG element length
* @param p_mb contain XML CUG body
* @return xml_length
*/
function f_XMLBody_Cug_Length(
template(value) Cug p_mb
) return integer {
var integer v_result := lengthof(encvalue(p_mb)) / 8;
return v_result;
} //* f_XMLBody_Cug_Length
/**
* @desc Calculation of XML MCID element length
* @param p_mb contain XML MCID body
* @return xml_length
*/
function f_XMLBody_Mcid_Length(
template(value) Mcid p_mb
) return integer {
var integer v_result := lengthof(encvalue(p_mb)) / 8;
return v_result;
} //* f_XMLBody_Mcid_Length
/**
* @desc Calculation of XML CW element length
* @param p_mb contain XML CW body
* @return xml_length
*/
function f_XMLBody_Cw_Length(
template(value) Ims_cw p_mb
) return integer {
var integer v_result := lengthof(encvalue(p_mb)) / 8;
return v_result;
} //* f_XMLBody_Cw_Length
/**
* @desc Calculation of XML CDIVN element length
* @param p_mb contain XML CDIVN body
* @return xml_length
*/
function f_XMLBody_Cdivn_Length(
template(value) Comm_div_info_type p_mb
) return integer {
var integer v_result := lengthof(encvalue(p_mb)) / 8;
return v_result;
} //* f_XMLBody_Cdivn_Length
/**
* @desc Calculation of XML PSTNTransit element length
* @param p_mb contain XML PSTNTransit body
* @return xml_length
*/
function f_XMLBody_PSTNTransit_Length(
template(value) PSTN_transit p_mb
) return integer {
var integer v_result := lengthof(encvalue(p_mb)) / 8;
return v_result;
} //* f_XMLBody_PSTNTransit_Length
/**
* @desc Calculation of XML Simservs element length
* @param p_mb contain XML Simservs body
* @return xml_length
*/
function f_XMLBody_Simservs_Length(
template(value) Simservs p_mb
) return integer {
var integer v_result := lengthof(encvalue(p_mb)) / 8;
return v_result;
} //* f_XMLBody_Simservs_Length
/**
* @desc Calculation of XML ResourceList length
* @param p_mb contain XML ResourceList body
* @return xml_length
*/
function f_XMLBody_ResourceList_Length(
template(value) Resource_lists p_mb
) return integer {
var integer v_result := lengthof(encvalue(p_mb)) / 8;
return v_result;
} //* f_XMLBody_ResourceList_Length
/**
* @desc Calculation of XML Ims3GPP length
* @param p_mb contain XML Ims3GPP body
* @return xml_length
*/
function f_XMLBody_Ims3GPP_Length(
template(value) TIMS3GPP p_mb
) return integer {
var integer v_result := lengthof(encvalue(p_mb)) / 8;
return v_result;
} //* f_XMLBody_Ims3GPP_Length
} //* group XMLlen_calculation
group simpleMsgSummaryBody_Length {
function f_simpleMsgSummaryBody_Length(
SimpleMsgSummary p_mb
) return integer {
//* 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"
//* "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;
}
for (var integer i := 0; i < lengthof(p_mb.msg_summary_line_list); i := i + 1) {
v_result := v_result + 2 + c_CRlen + lengthof(p_mb.msg_summary_line_list[i].msg_context_class) + 2 + lengthof(p_mb.msg_summary_line_list[i].msgs);
if (isvalue(p_mb.msg_summary_line_list[i].urgent_msgs)) {
v_auxstring := valueof(p_mb.msg_summary_line_list[i].urgent_msgs);
v_result := v_result + 1 + lengthof(v_auxstring);
}
}
}
for (var integer i := 0; i < lengthof(p_mb.opt_msg_headers); i := i + 1) {
v_result := v_result + 2 + c_CRlen + lengthof(p_mb.opt_msg_headers[i]);
}
}
return v_result;
}
}
group MIME_Len_calculation {
/**
* @desc Calculation of MIME length
* @param p_mb contain MIME message
* @return xml_length
*/
function f_MIMElength(
MIME_Message p_mb
) return integer {
v_result := v_result + lengthof(p_mb.boundary) + 2 /*0d0a*/;
for (var integer i := 0; i < lengthof(p_mb.mimeEncapsulatedList); i := i + 1) {
v_result := v_result + lengthof("Content-Type: ") + lengthof(p_mb.mimeEncapsulatedList[i].content_type) + 2 /*0d0a*/;
if (isvalue(p_mb.mimeEncapsulatedList[i].content_disposition)) {
v_result := v_result + lengthof("Content-Disposition: ") + lengthof(p_mb.mimeEncapsulatedList[i].content_disposition) + 2 /*0d0a*/;
}
// v_result := v_result +2/*0d0a*/; ??? to check
// assume SDP_Message ONLY in the message body
if (ischosen(p_mb.mimeEncapsulatedList[i].mime_encapsulated_part.sdpMessageBody)) {
v_result := v_result + f_SDPlength(p_mb.mimeEncapsulatedList[i].mime_encapsulated_part.sdpMessageBody);
}
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(
template(value) MessageBody p_mb
) return integer {
var integer v_result := 0;
v_result := v_result + lengthof(p_mb.textplain);
return v_result;
} //* group MessageBody_Calculation
group GiveHeaders {
/**
* @desc Return component variable of recordRoute header if vc_boo_recordRoute is true
* @return component variable of recordRoute header
*/
function f_recordroute(
) runs on SipComponent
return template(omit) RecordRoute {
template RecordRoute v_recordRoute := omit;
if (vc_boo_recordRoute) {
return vc_recordRoute;
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(omit) Route {
template(omit) Route v_route := omit;
if (vc_boo_route) {
return v_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!
}
group others {
/*
*
* @desc function combines two comma parameter lists
* @param p_list1 first list
* @param p_list2 second list
* @return comma parameter list that contains parameters from both input lists
* @verdict
*/
function f_merge_CommaParam_List(
template(value) CommaParam_List p_list1,
template(value) CommaParam_List p_list2
) return template(value) CommaParam_List {
var template(value) CommaParam_List p_result;
var integer limit1 := lengthof(p_list1);
for (var integer i := 0; i < limit1; i := i + 1) {
p_result[i] := p_list1[i];
}
for (var integer i := 0; i < lengthof(p_list2); i := i + 1) {
p_result[i + limit1] := p_list2[i];
}
return p_result;
}