Newer
Older
template(present) StatusLine p_statusLine := ?,
template(present) DeltaSec p_deltaSec := ?
statusLine := mw_statusLine(p_statusLine.statusCode, ?),
msgHeader := {expires := mw_Expires(p_deltaSec)}
}
template(present) Response mw_Response_PAsserted_Privacy(
template(present) StatusLine p_statusLine := ?,
template CallId p_callId,
template CSeq p_cSeq,
template PAssertedID p_pAssertedID,
template Privacy p_privacy
) modifies mw_Response_Base := {
statusLine := mw_statusLine(p_statusLine.statusCode, ?),
msgHeader := {
pAssertedID := p_pAssertedID,
privacy := p_privacy
}
template(present) StatusLine p_statusLine := ?,
template(value) GenValue p_cause
statusLine := mw_statusLine(p_statusLine.statusCode, ?),
msgHeader := {reason := mw_Reason(p_cause)}
}
template(present) StatusLine p_statusLine := ?,
template CallId p_callId,
template CSeq p_cSeq,
template RecordRoute p_recordRoute
) modifies mw_Response_Base := {
statusLine := mw_statusLine(p_statusLine.statusCode, ?),
msgHeader := {recordRoute := p_recordRoute}
}
template(present) StatusLine p_statusLine := ?,
template(present) Via p_via := ?
statusLine := mw_statusLine(p_statusLine.statusCode, ?),
template(present) StatusLine p_statusLine := ?,
template CallId p_callId,
template CSeq p_cSeq,
template Contact p_contact
) modifies mw_Response_Base := {
statusLine := mw_statusLine(p_statusLine.statusCode, ?),
template(present) StatusLine p_statusLine := ?,
template CallId p_callId,
template CSeq p_cSeq,
template AlertInfo p_alertInfo
) modifies mw_Response_Base := {
statusLine := mw_statusLine(p_statusLine.statusCode, ?),
msgHeader := {alertInfo := p_alertInfo}
}
template(present) StatusLine p_statusLine := ?,
template CallId p_callId,
template CSeq p_cSeq,
template HistoryInfo p_historyInfo
) modifies mw_Response_Base := {
statusLine := mw_statusLine(p_statusLine.statusCode, ?),
msgHeader := {historyInfo := p_historyInfo}
}
template(present) StatusLine p_statusLine := ?,
template CallId p_callId,
template CSeq p_cSeq,
template Require p_require,
template MessageBody p_mb
) modifies mw_Response_Base := {
statusLine := mw_statusLine(p_statusLine.statusCode, ?),
msgHeader := {require := p_require},
messageBody := p_mb
}
template(present) StatusLine p_statusLine := ?,
template CallId p_callId,
template CSeq p_cSeq,
template Require p_require
) modifies mw_Response_Base := {
statusLine := mw_statusLine(p_statusLine.statusCode, ?),
template(present) Response mw_Response_Require_ifpresent(
template(present) StatusLine p_statusLine := ?,
template(present) Require p_require
statusLine := mw_statusLine(p_statusLine.statusCode, ?),
msgHeader := {require := p_require ifpresent}
}
template(present) StatusLine p_statusLine := ?,
template CallId p_callId,
template CSeq p_cSeq,
template Supported p_supported
) modifies mw_Response_Base := {
statusLine := mw_statusLine(p_statusLine.statusCode, ?),
msgHeader := {supported := p_supported}
}
template(present) StatusLine p_statusLine := ?,
template CallId p_callId,
template CSeq p_cSeq
) modifies mw_Response_Base := {
statusLine := mw_statusLine(p_statusLine.statusCode, ?),
group SDP_Templates {
group SDP_Messages {
group base_templates {
template(value) SDP_Message m_SDP_base := {
user_name := PX_SIP_SDP_USER_NAME,
session_id := PX_SIP_SDP_SESSION_ID,
session_version := "0",
net_type := c_in,
addr_type := c_ip4,
},
//* 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,
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
connection := omit,
bandwidth := omit,
times := {
{
time_field := {"0", "0"},
time_repeat := omit
}
}, //* t=0 0
timezone_adjustments := omit,
key := omit,
attributes := omit,
media_list := omit
}
template(value) SDP_Message m_SDP(
template(value) SDP_media_desc p_media,
template(value) SipUserProfile p_userprofile
) modifies m_SDP_base := {
origin := {
addr := p_userprofile.contactIpaddr
},
//* o=voicesession 12345 12345 IN IP4 172.27.1.219
connection := {
net_type := c_in,
addr_type := c_ip4,
conn_addr := {
addr := p_userprofile.bearerIpaddr,
ttl := omit,
num_of_addr := omit
}
}, //* c=IN
//* IP4
//* 172.27.1.219
template(value) SDP_Message m_SDP_mediaList(
template(value) SDP_media_desc_list p_media_list,
template(value) SipUserProfile p_userprofile
origin := {
addr := p_userprofile.contactIpaddr
},
//* o=voicesession 12345 12345 IN IP4 172.27.1.219
connection := {
net_type := c_in,
addr_type := c_ip4,
conn_addr := {
addr := p_userprofile.bearerIpaddr,
ttl := omit,
num_of_addr := omit
}
}, //* c=IN
//* IP4
//* 172.27.1.219
template(value) SDP_Message m_SDP_media_attr_preconditions(
template(value) SDP_media_desc p_media,
template(value) SipUserProfile p_userprofile,
template(value) SDP_attribute_list p_attribute_list
) modifies m_SDP := {
media_field := {
media := c_audio,
ports := {
port_number := 8500,
num_of_ports := omit
},
transport := c_rtpAvp,
fmts := {"0"}
}, //* m=audio
//* 8500
//* RTP/AVP
//* 0
information := omit,
connections := omit,
bandwidth := omit,
key := omit,
attributes := p_attribute_list
}
}
}
template(value) SDP_Message m_SDP_attribute(
template(value) SDP_media_desc p_media,
template(value) SipUserProfile p_userprofile,
template(value) SDP_attribute p_loc_attribute
}
template(present) SDP_Message mw_SDP := {
protocol_version := 0, //* v=0
origin := ?,
session_name := ?,
information := omit,
uri := omit,
emails := omit,
phone_numbers := omit,
connection := ?,
bandwidth := omit,
times := {
{
time_field := {"0", "0"},
time_repeat := omit
}
}, //* t=0 0
timezone_adjustments := omit,
key := omit,
attributes := omit,
media_list := ?
}
template(value) SDP_Message m_SDP_bandwidth(
template(value) SDP_media_desc p_media,
template(value) SipUserProfile p_userprofile
) modifies m_SDP := {
bandwidth := {
{
PX_SIP_SDP_B_MODIFIER,
PX_SIP_SDP_B_BANDWIDTH
template(value) SDP_Message m_SDP_unacceptable(
template(value) SDP_media_desc p_media,
template(value) SipUserProfile p_userprofile
) modifies m_SDP := {
protocol_version := 1, //* v=1 unacceptable version of
//* SDP
PX_SIP_SDP_B_MODIFIER,
PX_SIP_SDP_B_BANDWIDTH
template(value) SDP_Message m_SDP_encrypted(
template(value) SDP_media_desc p_media,
template(value) SipUserProfile p_userprofile
PX_SIP_SDP_B_MODIFIER,
PX_SIP_SDP_B_BANDWIDTH
group SDP_Fields {
template(value) SDP_media_desc m_media(template(value) SDP_media_field p_mf) := {
media_field := p_mf,
information := omit,
connections := omit,
bandwidth := omit,
key := omit,
attributes := omit
template(value) SDP_media_desc m_mediaFieldBandwdthAttributes(
template(value) SDP_media_field p_mf,
template(omit) SDP_bandwidth_list p_bw_l := omit,
template(omit) SDP_attribute_list p_attributes := omit
) := {
media_field := p_mf,
information := omit,
connections := omit,
bandwidth := p_bw_l,
key := omit,
attributes := p_attributes
template(value) charstring p_payloadType,
template(value) charstring p_encoding,
template(value) charstring p_clockrate,
template(omit) charstring p_parameters := omit,
media_field := {
media := c_audio, //* "audio",
}, //* m=audio 8500 RTP/AVP 8
information := omit,
connections := omit,
bandwidth := omit,
attributes := {{rtpmap := {
payload_type := p_payloadType,
codec := {
encoding := p_encoding,
clockrate := p_clockrate,
parameters := p_parameters
}
}
}} //* a=rtpmap:8 PCMA/8000
/**
* @desc send template with specific media transport and attribute values
* @param p_mediaAttribute parameter for SDP media transport supported by the IUT
* former PX_SIP_SDP_media_transport
* @param p_mediaAttribute parameter for SDP media attribute supported by the IUT,
* former PX_SIP_SDP_media_attribute_Exp & PX_SIP_SDP_media_transport_Exp
* @param p_mTypeSubtype parameter for SDP media type supported by the IUT,
*/
template(value) SDP_media_desc m_media_unsupported(
template(value) charstring p_mediaTransport,
template(value) SDP_attribute_rtpmap p_mediaAttribute,
template(value) charstring p_mTypeSubtype := "video"
transport := p_mediaTransport,
}, //* m=audio 8500 RTP/AVP 0
information := omit,
connections := omit,
bandwidth := omit,
key := omit,
attributes := {{rtpmap := p_mediaAttribute}}
template(value) charstring p_loc_m,
template(value) integer p_loc_b
modifier := p_loc_m,
bandwidth := p_loc_b
template(value) SDP_bandwidth m_bandwidth_as_64 := {
modifier := "AS",
bandwidth := 64
}
template(present) SDP_bandwidth mw_bandwidth_rs := {
modifier := "RS",
bandwidth := ?
}
template(present) SDP_bandwidth mw_bandwidth_rr := {
modifier := "RR",
bandwidth := ?
}
template(value) SDP_media_field m_media_field(
template(value) charstring p_media,
template(value) integer p_portNum,
template(value) charstring p_transport,
template(value) charstring p_fmts
) := {
media := p_media,
ports := {
port_number := p_portNum,
num_of_ports := omit
},
transport := p_transport,
fmts := {p_fmts}
}
template(present) SDP_media_field mw_media_PCMU := {
media := c_audio,
ports := {
port_number := ?,
num_of_ports := *
},
transport := c_rtpAvp,
fmts := {"0"}
}
template(present) SDP_media_field mw_media_PCMA := {
media := c_audio,
ports := {
port_number := 8500,
num_of_ports := omit
},
transport := c_rtpAvp,
fmts := {"8"}
}
template(present) SDP_media_field mw_media_PCMA_U_DPT := {
media := c_audio,
ports := {
port_number := ?,
num_of_ports := *
},
transport := c_rtpAvp,
fmts := {*}
}
template(present) SDP_media_field mw_media_T38 := {
media := c_image,
ports := {
port_number := ?,
num_of_ports := *
},
transport := pattern "*ptl", //* udptl,tcptl
fmts := {"t38"}
}
template(present) SDP_media_field mw_media_G722 := {
media := c_audio,
ports := {
port_number := ?,
num_of_ports := *
},
transport := "RTP/AVP",
fmts := {"9"}
}
template(present) SDP_media_field mw_media_AMR_DPT := {
media := c_audio,
ports := {
port_number := ?,
num_of_ports := *
},
transport := c_rtpAvp,
fmts := {*}
}
template(present) SDP_media_field mw_media_MSRP := {
media := c_msrp,
ports := {
port_number := ?,
num_of_ports := omit
},
transport := c_msrpTcp,
fmts := {*}
}
template(value) SDP_attribute m_attribute_sendonly := {sendonly := {}}
template(present) SDP_attribute mw_attribute_sendonly := {sendonly := {}}
template(value) SDP_attribute m_attribute_recvonly := {recvonly := {}}
template(present) SDP_attribute mw_attribute_recvonly := {recvonly := {}}
template(value) SDP_attribute m_attribute_sendrecv := {sendrecv := {}}
template(present) SDP_attribute mw_attribute_sendrecv := {sendrecv := {}}
template(value) SDP_attribute m_attribute_inactive := {inactive := {}}
template(present) SDP_attribute mw_attribute_inactive := {inactive := {}}
template(present) SDP_attribute mw_attribute_sendonly_inactive := (mw_attribute_sendonly, mw_attribute_inactive);
template SDP_attribute mw_attribute_sendrecv_recvonly_omit := (mw_attribute_sendrecv, mw_attribute_recvonly, omit);
template(value) SDP_attribute m_attribute_base(
template(value) SDP_attribute_rtpmap p_attr_value
}
/**
* @desc send template for a specific media attribute
* @param attribte value, former PX_SIP_SDP_DYN & " " & PX_SIP_SDP_MEDIA_TRANSPORT_AMR
*/
template(value) SDP_attribute m_attribute_AMR_DPT(//"0 AMR"
template(value) SDP_attribute_rtpmap p_attr_value := {"0", {"AMR", "8000", omit}}
) := m_attribute_base(p_attr_value);
/**
* @desc send template for a specific media attribute
* @param attribte value, former PX_SIP_SDP_DYN & " " & PX_SIP_SDP_MEDIA_TRANSPORT_CLE
*/
template(value) SDP_attribute m_attribute_CLEARMODE_DPT(//"0 CLEARMODE/8000"
template(value) SDP_attribute_rtpmap p_attr_value := {"0", {"CLEARMODE", "8000", omit}}
) := m_attribute_base(p_attr_value);
/**
* @desc send template for a specific media attribute
* @param attribte value, former PX_SIP_SDP_ENCODING_ATTRIBUTE_G222
*/
template(value) SDP_attribute m_attribute_G722(//"9 G722/8000"
template(value) SDP_attribute_rtpmap p_attr_value := {"9", {"G722", "8000", omit}}
) := m_attribute_base(p_attr_value);
/**
* @desc send template for a specific media attribute
* @param attribte value, former PX_SIP_SDP_ENCODING_ATTRIBUTE_PCMU
*/
template(value) SDP_attribute m_attribute_PCMU(//"0 PCMU/8000"
template(value) SDP_attribute_rtpmap p_attr_value := {"0", {"PCMU", "8000", omit}}
) := m_attribute_base(p_attr_value);
/**
* @desc send template for a specific media attribute
* @param attribte value, former PX_SIP_SDP_DYN & " " & PX_SIP_SDP_MEDIA_TRANSPORT_PCMU
*/
template(value) SDP_attribute m_attribute_PCMU_DPT(//"0 PCMU/8000"
template(value) SDP_attribute_rtpmap p_attr_value := {"0", {"PCMU", "8000", omit}}
) := m_attribute_base(p_attr_value);
/**
* @desc send template for a specific media attribute
* @param attribte value, former PX_SIP_SDP_ENCODING_ATTRIBUTE_PCMA
*/
template(value) SDP_attribute m_attribute_PCMA(//"8 PCMA/8000"
template(value) SDP_attribute_rtpmap p_attr_value := {"8", {"PCMA", "8000", omit}}
) := m_attribute_base(p_attr_value);
/**
* @desc send template for a specific media attribute
* @param attribte value, former PX_SIP_SDP_DYN & " " & PX_SIP_SDP_MEDIA_TRANSPORT_PCMA
*/
template(value) SDP_attribute m_attribute_PCMA_DPT(//"0 PCMA/8000"
template(value) SDP_attribute_rtpmap p_attr_value := {"0", {"PCMA", "8000", omit}}
template(present) SDP_attribute mw_attribute_T38 := {
unknown := {
name := ?,
attr_value := pattern "*t38*"
}
}
template(value) SDP_attribute m_attribute_curr(
template(value) charstring p_preconditionType,
template(value) charstring p_statusType,
template(value) charstring p_direction
) := {
curr := {
preconditionType := p_preconditionType,
statusType := p_statusType,
direction := p_direction
}
}
template(present) SDP_attribute mw_attribute_curr := {curr := ?}
template(value) SDP_attribute m_attribute_des(
template(value) charstring p_preconditionType,
template(value) charstring p_strength,
template(value) charstring p_statusType,
template(value) charstring p_direction
) := {
des := {
preconditionType := p_preconditionType,
strength := p_strength,
statusType := p_statusType,
direction := p_direction
}
}
template(present) SDP_attribute mw_attribute_des := {des := ?}
template(value) SDP_attribute m_attribute_conf(
template(value) charstring p_preconditionType,
template(value) charstring p_statusType,
template(value) charstring p_direction
) := {
conf := {
preconditionType := p_preconditionType,
statusType := p_statusType,
direction := p_direction
}
template(value) SimpleMsgSummary m_SMS(
template(value) Msg_summary_line_list p_summaryLineList,
template(value) charstring p_uri
) := {
msg_status_line := m_msgStatusLine_yes,
msg_account := m_msgAccount(p_uri),
msg_summary_line_list := p_summaryLineList,
opt_msg_headers := omit
template(present) SimpleMsgSummary mw_SMS := {
msg_status_line := ?,
msg_account := *,
msg_summary_line_list := *,
opt_msg_headers := *
}
template(present) SimpleMsgSummary mw_SMS_yes modifies mw_SMS := {
msg_status_line := mw_msgStatusLine_yes
template(present) SimpleMsgSummary mw_SMS_yesUri modifies mw_SMS_yes := {
msg_account := mw_msgAccount
template(present) SimpleMsgSummary mw_SMS_yesVoice modifies mw_SMS_yes := {
msg_summary_line_list := {mw_msgSummaryLine(c_voiceMessage)}
template(present) SimpleMsgSummary mw_SMS_yesUriVoice modifies mw_SMS_yesUri := {
msg_summary_line_list := {mw_msgSummaryLine(c_voiceMessage)}
template(value) Msg_status_line m_msgStatusLine_yes := {
msg_type := c_messageWaiting,
msg_status := "yes"
}
template(present) Msg_status_line mw_msgStatusLine_yes := {
msg_type := c_messageWaiting,
msg_status := "yes"
}
template(value) Msg_account m_msgAccount(
template(value) charstring p_uri
) := {
msg_type_account := c_messageAccount,
account_URI :=
p_uri // m_SipUrl_NumberHostParam(PX_IMS_SUT_UE2_PUBLIC_USER,PX_IMS_SUT_UE2_HOME_DOMAIN,omit)
template(present) Msg_account mw_msgAccount := {
msg_type_account := c_messageAccount,
account_URI := ?
}
template(value) Msg_summary_line m_msgSummaryLine(
template(value) charstring p_msgContexClass,
template(value) charstring p_msgs,
template(value) charstring p_urgent_msgs
) := {
msg_context_class := p_msgContexClass,
msgs := p_msgs,
urgent_msgs := p_urgent_msgs
template(present) Msg_summary_line mw_msgSummaryLine(
template(present) charstring p_msgContexClass := ?
) := {
msg_context_class := p_msgContexClass,
msgs := ?,
urgent_msgs := *
template(value) MessageBody m_MBody_SDP(
template(value) SDP_Message p_SDP
) := {
sdpMessageBody := p_SDP
}
template(value) MessageBody m_MBody_XML(
template(value) XmlBody p_xmlBody
) := {
xmlBody := p_xmlBody
}
template(value) MessageBody m_mBody_SMS(
template(value) SimpleMsgSummary p_SMS
) := {
simpleMsgSummary := p_SMS
}
template(value) MessageBody m_MBody_longPlainText := {textplain := c_longMessageContent_1300Bytes}
template(value) MessageBody m_mBody_plainText(
template(value) charstring p_plaitext
) := {
textplain := p_plaitext
}
template(value) MessageBody m_MBody_sipfrag(
template(value) charstring p_sipfrag
) := {
sipfrag := p_sipfrag
}
template(value) MessageBody m_MBody_MIMESdpXml(
template(value) SDP_Message p_sdp,
template(value) XmlBody p_xmlBody
) := {
content_type := c_sdpApplication,
mime_encapsulated_part := {sdpMessageBody := p_sdp}
},
{
content_type := c_ims3gppCwApplication,
mime_encapsulated_part := {xmlBody := p_xmlBody}
}
}
}
}
template(value) MessageBody m_MBody_MIMESdpEncrypted(
template(value) SDP_Message p_sdp
) := {
content_type := "application/sdp",
content_disposition := "attachment;handling=required;filename=smime.p7",
template(present) MessageBody mw_MBody_SDP(
template(present) SDP_Message p_SDP := ?
) := {
sdpMessageBody := p_SDP
}
template(present) MessageBody mw_MBody_XML(
template(present) XmlBody p_xmlBody := ?
) := {
xmlBody := p_xmlBody
}
template(present) MessageBody mw_mBody_SMS(
template(present) SimpleMsgSummary p_SMS := ?
) := {
simpleMsgSummary := p_SMS
}
template(present) SDP_Message p_sdp := ?,
template(present) XmlBody p_xmlBody := ?
mimeMessageBody := {
boundary := ?,
mimeEncapsulatedList := {
{
content_type := ?,
content_disposition := *,
mime_encapsulated_part := {sdpMessageBody := p_sdp}
},
{
content_type := ?,
content_disposition := *,
mime_encapsulated_part := {xmlBody := p_xmlBody}
}
template(present) MessageBody mw_MBody_MIME_Ims3gpp(
template charstring p_disposition,
template(present) Ims_3gpp p_ims3gpp := ?
mimeMessageBody := {
boundary := ?,
mimeEncapsulatedList := {
*,
{
content_type := c_ims3gppApplication,
content_disposition := p_disposition,
mime_encapsulated_part := {xmlBody := {ims3gpp := p_ims3gpp}}
},
*
}
}
}
template(present) MessageBody mw_MBody_MIME_Ims3gppCW(
template charstring p_disposition,
template(present) Ims_3gpp p_ims3gpp := ?
mimeMessageBody := {
boundary := ?,
mimeEncapsulatedList := {
*,
{
content_type := c_ims3gppCwApplication,
content_disposition := p_disposition,
mime_encapsulated_part := {xmlBody := {ims3gpp := p_ims3gpp}}
},
*
}
}
}
}
/*
*
* @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(
template(value) MessageBody p_mb_par
) return integer {
// by default it is set to true
// in case the codec encodes the variant selector, this
// needs to be changed to ischosen...
v_result := lengthof(encvalue(p_mb_par)) / 8; // length
// in
// bytes,
// let get
// length
// of
// encoded
// value
}
else {
// assume SDP_Message ONLY in the message body
if (ischosen(p_mb_par.sdpMessageBody)) {
v_result := f_SDPlength(valueof(p_mb_par.sdpMessageBody));
}
v_result := f_XMLBody_Length(valueof(p_mb_par.xmlBody), PX_USE_FX_FOR_XML_LENGTH);
// assume simpleMsgSummary_Body ONLY in the message body
if (ischosen(p_mb_par.simpleMsgSummary)) {
v_result := f_simpleMsgSummaryBody_Length(valueof(p_mb_par.simpleMsgSummary));
}
if (ischosen(p_mb_par.mimeMessageBody)) {
v_result := f_MIMElength(valueof(p_mb_par.mimeMessageBody));
}
v_result := f_TextPlainLength(p_mb_par); // same
// function
// due to
// same
// type
// with
// textplain
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 i, j, k, v_len_con0, v_len_con1, v_len_con2, v_len_attr;
var integer v_result := 2;
//* due to empty line beginning of message body
var charstring v_auxstring;
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 (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 (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);