SIP_Emulation: Handle SIP REGISTER from peer
This is needed when emulating an IMS core.
Change-Id: I49dfe54434113eb8b75306a3a8ddda940fa14743
diff --git a/library/SIP_Emulation.ttcn b/library/SIP_Emulation.ttcn
index a5ebcfb..3de7169 100644
--- a/library/SIP_Emulation.ttcn
+++ b/library/SIP_Emulation.ttcn
@@ -249,6 +249,19 @@
var SipUrl sip_to;
alt {
+ /* SIP REGISTER was received on SIP socket/port */
+ [] SIP.receive(tr_SIP_REGISTER) -> value sip_req {
+ var CallidString call_id := sip_req.msgHeader.callId.callid;
+ if (f_call_id_known(call_id)) {
+ /* re-register? */
+ vc_conn := f_comp_by_call_id(call_id);
+ } else {
+ /* new REGISTER: check expect */
+ vc_conn := ops.create_cb.apply(sip_req, id);
+ f_call_table_add(vc_conn, call_id);
+ }
+ CLIENT.send(sip_req) to vc_conn;
+ }
/* SIP INVITE was received on SIP socket/port */
[] SIP.receive(tr_SIP_INVITE) -> value sip_req {
var CallidString call_id := sip_req.msgHeader.callId.callid;
@@ -355,8 +368,9 @@
var SipUrl sip_to;
var integer i;
- if (sip_req.requestLine.method != INVITE_E) {
- setverdict(fail, "SIP ExpectedCreateCallback needs INVITE");
+ if (sip_req.requestLine.method != INVITE_E and
+ sip_req.requestLine.method != REGISTER_E) {
+ setverdict(fail, "SIP ExpectedCreateCallback needs REGISTER/INVITE");
mtc.stop
return ret;
}