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.orgNeels 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>