SIP_Emulation: Handle SIP REGISTER from peer

This is needed when emulating an IMS core.

Change-Id: I49dfe54434113eb8b75306a3a8ddda940fa14743
This commit is contained in:
Pau Espin 2024-05-08 21:15:01 +02:00
parent 01f1df8ef8
commit 4757be713f
1 changed files with 16 additions and 2 deletions

View File

@ -249,6 +249,19 @@ runs on SIP_Emulation_CT {
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 @@ runs on SIP_Emulation_CT return SIP_ConnHdlr {
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;
}