Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
/**
* @author STF471
* @version $Id$
* @desc This module provides the steps used by the test component for SIP-IMS tests.
* This module is part of LibImsV3.
*/
module LibIms_Steps {
// LibSip
import from LibSip_SIPTypesAndValues all;
import from LibSip_Templates all;
import from LibSip_Steps all;
import from LibSip_PIXITS all;
import from LibSip_Interface all;
import from LibSip_MessageBodyTypes all;
import from LibSip_Common all;
// LibIms
import from LibIms_Templates all;
import from LibIms_Interface all;
import from LibIms_SIPTypesAndValues all;
group externalfunctions {
} // end group externalfunctions
group parameterOperations {
/**
* @desc Adds new Via parameter
* @param p_message (request) SIP message to be used to prepair via header
*/
function f_addNewViaParameter(
in Request p_message
) runs on ImsComponent {
var integer v_intVia;
var integer i := 0;
if (isvalue(p_message.msgHeader.via)) {
v_intVia := lengthof(p_message.msgHeader.via.viaBody);
while (i < v_intVia) {
p_message.msgHeader.via.viaBody[v_intVia] := p_message.msgHeader.via.viaBody[v_intVia - 1];
v_intVia := v_intVia - 1;
}
vc_branch := c_branchCookie & f_getRndTag();
p_message.msgHeader.via.viaBody[0] := valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile));
vc_via := p_message.msgHeader.via;
}
}
/**
* @desc Removes own Via parameter
* @param p_message (request) SIP message to be used to prepair via header
*/
function f_removeOwnViaParameter(
in Response p_message
) runs on ImsComponent {
var integer v_intVia;
var Via v_via := c_empty_Via;
var integer i := 0;
if (ispresent(p_message.msgHeader.via)) {
v_intVia := lengthof(p_message.msgHeader.via.viaBody) - 1;
for (i := 0; i < v_intVia; i := i + 1) {
v_via.viaBody[i] := p_message.msgHeader.via.viaBody[i + 1];
}
vc_via := v_via;
}
}
/**
* @desc Adds new RecordRoute parameter and removes Route parameter
* @param p_message (request) SIP message to be used to prepair via header
*/
function f_addNewRecordRouteAndRemoveRoutParameter(
in Request p_message
) runs on ImsComponent {
var integer v_intRoute, v_intRecordRoute;
var integer i := 1;
var RouteBody v_route1;
var Route v_newRoute;
v_newRoute.fieldName := ROUTE_E;
if (isvalue(p_message.msgHeader.route)) {
v_intRoute := lengthof(p_message.msgHeader.route.routeBody);
v_route1 := p_message.msgHeader.route.routeBody[0];
while (i < v_intRoute) {
v_newRoute.routeBody[i - 1] := p_message.msgHeader.route.routeBody[i];
i := i + 1;
}
vc_route := v_newRoute;
}
if (isvalue(p_message.msgHeader.recordRoute)) {
v_intRecordRoute := lengthof(p_message.msgHeader.recordRoute.routeBody);
while (0 < v_intRecordRoute) {
p_message.msgHeader.recordRoute.routeBody[v_intRecordRoute] := p_message.msgHeader.recordRoute.routeBody[v_intRecordRoute - 1];
v_intRecordRoute := v_intRecordRoute - 1;
}
p_message.msgHeader.recordRoute.routeBody[0] := v_route1;
vc_recordRoute := valueof(p_message.msgHeader.recordRoute);
}
}
/**
* @desc Adds new RecordRoute parameter (IMS)
* @param p_rr The recordRoute parameter to add
*/
function f_addNewRecordRouteIMS(
in RecordRoute p_rr
) runs on ImsComponent
return template RecordRoute {
var integer v_intRecordRoute;
var template RecordRoute v_recordRoute := omit;
v_intRecordRoute := lengthof(p_rr.routeBody);
if (v_intRecordRoute > 0) {
while (0 < v_intRecordRoute) {
p_rr.routeBody[v_intRecordRoute] := p_rr.routeBody[v_intRecordRoute - 1];
v_intRecordRoute := v_intRecordRoute - 1;
}
p_rr.routeBody[0] := valueof(m_routeBody_currIpAddr(vc_userprofile));
vc_recordRoute := p_rr;
return vc_recordRoute;
}
else {
return (v_recordRoute);
}
}
} // end group parameterOperations
group fieldOperations {
/**
* @desc Sets BYE header fields (IMS addresses) extension of general settings from LibSip basic function
* @param p_cSeq_s The current cSeq
* @param p_to_user The selected user's SIP URL
*/
function f_setHeadersBYE(
inout CSeq p_cSeq_s,
in SipUrl p_to_user
) runs on ImsComponent {
vc_requestUri := p_to_user; // Request URI of Invite is identical with To header
vc_route := f_route(); // update the route header field depending on vc_boo_route
vc_recordRoute := f_recordroute(); // update the route header field depending on vc_boo_route
LibSip_Steps.f_setHeadersBYE(p_cSeq_s);
} // end f_setHeadersBYE
/**
* @desc Sets CANCEL header fields (IMS addresses) extension of general settings from LibSip basic function
* @param p_cSeq_s The current cSeq
*/
function f_setHeadersCANCEL(
inout CSeq p_cSeq_s
) runs on ImsComponent {
vc_route := f_route(); // update the route header field depending on vc_boo_route
vc_recordRoute := f_recordroute(); // update the route header field depending on vc_boo_route
LibSip_Steps.f_setHeadersCANCEL(p_cSeq_s);
} // end f_setHeadersCANCEL
/**
* @desc Sets headers for forward request from AS in case if AS acts as Proxy
* @param p_cSeq_s The current cSeq
* @param p_proxyMode true = proxyMode, false = B2BMode
*/
function f_setHeadersForwardRequestFromAS(
inout CSeq p_cSeq_s,
boolean p_proxyMode
) runs on ImsComponent {
var Request v_request;
v_request := vc_request;
if (p_proxyMode) {
vc_requestUri2 := v_request.requestLine.requestUri;
vc_to := v_request.msgHeader.toField;
vc_contact := v_request.msgHeader.contact;
f_addNewViaParameter(v_request);
f_addNewRecordRouteAndRemoveRoutParameter(v_request);
}
else {
// B2Bmode
vc_contact := m_Contact(m_SipUrl_contactIpaddr(vc_userprofile));
if (PX_SEED) {
vc_callId := {
fieldName := CALL_ID_E,
callid := f_getRndCallId()
};
} else {
vc_callId := {
fieldName := CALL_ID_E,
callid := f_getRndCallId() & c_AT & vc_userprofile.currIpaddr
};
}
}
} // end function f_setHeadersForwardRequest
/**
* @desc Sets header fields for forward request from AS in case if AS acts as Proxy
*/
function f_setHeadersForwardResponseFromAS(
) runs on ImsComponent {
Loading
Loading full blame…