Change in osmo-msc[master]: remove code dup: add msc_mgcp_try_call_assignment()

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Neels Hofmeyr gerrit-no-reply at lists.osmocom.org
Fri Jan 4 16:24:59 UTC 2019


Neels Hofmeyr has submitted this change and it was merged. ( https://gerrit.osmocom.org/12398 )

Change subject: remove code dup: add msc_mgcp_try_call_assignment()
......................................................................

remove code dup: add msc_mgcp_try_call_assignment()

Various places in the code check a flag whether assignment was started and
launch it. To fix incoming-call-during-ongoing-call, I will tweak that logic.
To be able to do that only in one place, remove code dup.

Cosmetic preparation for I1f8746e7babfcd3028a4d2c0ba260c608c686c76 and
I0ba216b737909e92080a722db26e3577726c63cb/

Depends: I11b182a03f5ecb6df7cd8f260757d3626c8e945d (libosmocore: LOGPFSMSL)
Change-Id: I11c0b7dc3f1a747028629b48e522bb3b864884ba
---
M include/osmocom/msc/msc_mgcp.h
M src/libmsc/gsm_04_08_cc.c
M src/libmsc/msc_mgcp.c
M tests/msc_vlr/Makefile.am
M tests/msc_vlr/msc_vlr_tests.c
5 files changed, 24 insertions(+), 27 deletions(-)

Approvals:
  Harald Welte: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/include/osmocom/msc/msc_mgcp.h b/include/osmocom/msc/msc_mgcp.h
index 9d8b01d..f7cc932 100644
--- a/include/osmocom/msc/msc_mgcp.h
+++ b/include/osmocom/msc/msc_mgcp.h
@@ -57,6 +57,7 @@
 	mgcp_trans_id_t mgw_pending_trans;
 };
 
+int msc_mgcp_try_call_assignment(struct gsm_trans *trans);
 int msc_mgcp_call_assignment(struct gsm_trans *trans);
 int msc_mgcp_ass_complete(struct ran_conn *conn, uint16_t port, char *addr);
 int msc_mgcp_call_complete(struct gsm_trans *trans, uint16_t port, char *addr);
diff --git a/src/libmsc/gsm_04_08_cc.c b/src/libmsc/gsm_04_08_cc.c
index 5567da9..be9a451 100644
--- a/src/libmsc/gsm_04_08_cc.c
+++ b/src/libmsc/gsm_04_08_cc.c
@@ -736,12 +736,7 @@
 	new_cc_state(trans, GSM_CSTATE_MO_TERM_CALL_CONF);
 
 	/* Assign call (if not done yet) */
-	if (trans->assignment_done == false) {
-		rc = msc_mgcp_call_assignment(trans);
-		trans->assignment_done = true;
-	}
-	else
-		rc = 0;
+	rc = msc_mgcp_try_call_assignment(trans);
 
 	/* don't continue, if there were problems with
 	 * the call assignment. */
@@ -780,14 +775,7 @@
 		return rc;
 
 	/* Assign call (if not done yet) */
-	if (trans->assignment_done == false) {
-		rc = msc_mgcp_call_assignment(trans);
-		trans->assignment_done = true;
-	}
-	else
-		rc = 0;
-
-	return rc;
+	return msc_mgcp_try_call_assignment(trans);
 }
 
 static int gsm48_cc_rx_alerting(struct gsm_trans *trans, struct msgb *msg)
@@ -1706,7 +1694,6 @@
 static int tch_rtp_create(struct gsm_network *net, uint32_t callref)
 {
 	struct gsm_trans *trans;
-	int rc;
 
 	/* Find callref */
 	trans = trans_find_by_callref(net, callref);
@@ -1737,14 +1724,7 @@
 	trans->tch_rtp_create = true;
 
 	/* Assign call (if not done yet) */
-	if (trans->assignment_done == false) {
-		rc = msc_mgcp_call_assignment(trans);
-		trans->assignment_done = true;
-	}
-	else
-		rc = 0;
-
-	return rc;
+	return msc_mgcp_try_call_assignment(trans);
 }
 
 /* Trigger TCH_RTP_CREATE acknowledgement */
diff --git a/src/libmsc/msc_mgcp.c b/src/libmsc/msc_mgcp.c
index 23e68e7..5a8ee79 100644
--- a/src/libmsc/msc_mgcp.c
+++ b/src/libmsc/msc_mgcp.c
@@ -951,6 +951,22 @@
 	.event_names = msc_mgcp_fsm_evt_names,
 };
 
+/* Try to invoke call assignment and set trans->assignment_done flag if invoked.
+ * This is relevant for already ongoing calls -- scenario:
+ *  - subscriber is in an active voice call,
+ *  - another call is coming in.
+ * For the second call coming in, we must wait to establish RTP and assignment until the first call is CC-Disconnected.
+ */
+int msc_mgcp_try_call_assignment(struct gsm_trans *trans)
+{
+	struct ran_conn *conn = trans->conn;
+	if (trans->assignment_done)
+		return 0;
+	LOGPFSMSL(conn->fi, DMGCP, LOGL_INFO, "Starting call assignment\n");
+	trans->assignment_done = true;
+	return msc_mgcp_call_assignment(trans);
+}
+
 /* Notify that a new call begins. This will create a connection for the
  * RAN and the CN on the MGW.
  * Parameter:
diff --git a/tests/msc_vlr/Makefile.am b/tests/msc_vlr/Makefile.am
index bdb8f44..8a5e719 100644
--- a/tests/msc_vlr/Makefile.am
+++ b/tests/msc_vlr/Makefile.am
@@ -32,7 +32,7 @@
 	-Wl,--wrap=gsm340_gen_scts \
 	-Wl,--wrap=osmo_get_rand_id \
 	-Wl,--wrap=msc_mgcp_call_release \
-	-Wl,--wrap=msc_mgcp_call_assignment \
+	-Wl,--wrap=msc_mgcp_try_call_assignment \
 	-Wl,--wrap=a_iface_tx_cipher_mode \
 	-Wl,--wrap=ranap_iu_tx_sec_mode_cmd \
 	-Wl,--wrap=osmo_sccp_tx_data_msg \
diff --git a/tests/msc_vlr/msc_vlr_tests.c b/tests/msc_vlr/msc_vlr_tests.c
index 8ae559e..de7600c 100644
--- a/tests/msc_vlr/msc_vlr_tests.c
+++ b/tests/msc_vlr/msc_vlr_tests.c
@@ -652,9 +652,9 @@
 	return 0;
 }
 
-/* override, requires '-Wl,--wrap=msc_mgcp_call_assignment' */
-int __real_msc_mgcp_call_assignment(struct gsm_trans *trans);
-int __wrap_msc_mgcp_call_assignment(struct gsm_trans *trans)
+/* override, requires '-Wl,--wrap=msc_mgcp_try_call_assignment' */
+int __real_msc_mgcp_try_call_assignment(struct gsm_trans *trans);
+int __wrap_msc_mgcp_try_call_assignment(struct gsm_trans *trans)
 {
 	log("MS <--Call Assignment-- MSC: subscr=%s callref=0x%x",
 	    vlr_subscr_name(trans->vsub), trans->callref);

-- 
To view, visit https://gerrit.osmocom.org/12398
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-msc
Gerrit-Branch: master
Gerrit-MessageType: merged
Gerrit-Change-Id: I11c0b7dc3f1a747028629b48e522bb3b864884ba
Gerrit-Change-Number: 12398
Gerrit-PatchSet: 5
Gerrit-Owner: Neels Hofmeyr <nhofmeyr at sysmocom.de>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Jenkins Builder (1000002)
Gerrit-Reviewer: Neels Hofmeyr <nhofmeyr at sysmocom.de>
Gerrit-CC: Vadim Yanitskiy <axilirator at gmail.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20190104/1bff2388/attachment.htm>


More information about the gerrit-log mailing list