fixeria has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/31292 )
Change subject: library/DIAMETER_Emulation: initiate CER/CEA exchange in client mode ......................................................................
library/DIAMETER_Emulation: initiate CER/CEA exchange in client mode
Change-Id: I7537b306c2a569e2232597f21e15d3cf4ec9a12c Related: SYS#5602 --- M library/DIAMETER_Emulation.ttcn 1 file changed, 14 insertions(+), 1 deletion(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/92/31292/1
diff --git a/library/DIAMETER_Emulation.ttcn b/library/DIAMETER_Emulation.ttcn index 3fa6a5c..28db6b5 100644 --- a/library/DIAMETER_Emulation.ttcn +++ b/library/DIAMETER_Emulation.ttcn @@ -272,13 +272,14 @@ }
function main(DIAMETEROps ops, DIAMETER_conn_parameters p, charstring id) runs on DIAMETER_Emulation_CT { + var boolean server_mode := p.remote_sctp_port == -1; var Result res; g_diameter_id := id; f_imsi_table_init(); f_expect_table_init();
map(self:DIAMETER, system:DIAMETER_CODEC_PT); - if (p.remote_sctp_port == -1) { + if (server_mode) { res := DIAMETER_CodecPort_CtrlFunct.f_IPL4_listen(DIAMETER, p.local_ip, p.local_sctp_port, { sctp := valueof(ts_SCTP) }); } else { res := DIAMETER_CodecPort_CtrlFunct.f_IPL4_connect(DIAMETER, p.remote_ip, p.remote_sctp_port, @@ -290,6 +291,18 @@ } g_diameter_conn_id := res.connId;
+ /* If in client mode, send CER immediately */ + if (not server_mode) { + var template (value) PDU_DIAMETER req; + var PDU_DIAMETER rsp; + + req := ts_DIA_CER(f_inet_addr(p.local_ip), p.vendor_app_id, + orig_host := p.origin_host, orig_realm := p.origin_realm); + rsp := f_diameter_xceive(req, tr_DIAMETER_A(Capabilities_Exchange, req.application_id)); + /* notify our user that the CER->CEA exchange has happened */ + DIAMETER_UNIT.send(DiameterCapabilityExchgInd:{rx := rsp, tx := valueof(req)}); + } + while (true) { var DIAMETER_ConnHdlr vc_conn; var template IMSI imsi_t;