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 uploaded this change for review. ( https://gerrit.osmocom.org/12400
Change subject: fix: incoming call during ongoing call
......................................................................
fix: incoming call during ongoing call
If a call is already busy and another call is coming in, do not try to
immediately assign an lchan (before this patch, it fails because there already
is an mgcp_ctx for the conn). Leave the second CC transaction waiting.
When a call is hung up, as soon as the old mgcp_ctx is discarded, look for
other CC transactions that are waiting. If there is one, trigger assignment, so
a new mgcp_ctx is set up for the new call.
This fixes the following scenario:
- from A, call B.
- from C, call B; B rings during ongoing call.
- in B, pick up the call, choose to drop the old call.
After this patch, and with osmo-bsc patch with change-id
I0c00ec2c120e5008281755adcd4944a3ce4d8355
we are now able to talk to the new caller.
Related: OS#3735
Change-Id: I0ba216b737909e92080a722db26e3577726c63cb
---
M src/libmsc/msc_mgcp.c
1 file changed, 31 insertions(+), 0 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-msc refs/changes/00/12400/1
diff --git a/src/libmsc/msc_mgcp.c b/src/libmsc/msc_mgcp.c
index 8e2e7a9..4c17768 100644
--- a/src/libmsc/msc_mgcp.c
+++ b/src/libmsc/msc_mgcp.c
@@ -962,6 +962,10 @@
struct ran_conn *conn = trans->conn;
if (trans->cc.assignment_started)
return 0;
+ if (conn->rtp.mgcp_ctx) {
+ LOGPFSMSL(conn->fi, DMGCP, LOGL_INFO, "Another call is already ongoing, not assigning yet\n");
+ return 0;
+ }
LOGPFSMSL(conn->fi, DMGCP, LOGL_INFO, "Starting call assignment\n");
trans->cc.assignment_started = true;
return msc_mgcp_call_assignment(trans);
@@ -1152,6 +1156,23 @@
return 0;
}
+static struct gsm_trans *find_waiting_call(struct ran_conn *conn)
+{
+ struct gsm_trans *trans;
+ struct gsm_network *net = conn->network;
+
+ llist_for_each_entry(trans, &net->trans_list, entry) {
+ if (trans->conn != conn)
+ continue;
+ if (trans->protocol != GSM48_PDISC_CC)
+ continue;
+ if (trans->cc.assignment_started)
+ continue;
+ return trans;
+ }
+ return NULL;
+}
+
/* Release ongoing call.
* Parameter:
* trans: connection context.
@@ -1160,6 +1181,7 @@
{
struct mgcp_ctx *mgcp_ctx;
struct ran_conn *conn = trans->conn;
+ struct gsm_trans *waiting_trans;
OSMO_ASSERT(trans);
@@ -1203,5 +1225,14 @@
* all related context information */
conn->rtp.mgcp_ctx = NULL;
+ /* If there is another call still waiting to be activated, this is the time when the mgcp_ctx is available again
+ * and the other call can start assigning. */
+ waiting_trans = find_waiting_call(conn);
+ if (waiting_trans) {
+ LOGP(DMGCP, LOGL_DEBUG, "(ti %02x %s) Call waiting: starting Assignment\n",
+ waiting_trans->transaction_id, vlr_subscr_name(trans->vsub));
+ msc_mgcp_try_call_assignment(waiting_trans);
+ }
+
return 0;
}
--
To view, visit https://gerrit.osmocom.org/12400
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-msc
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: I0ba216b737909e92080a722db26e3577726c63cb
Gerrit-Change-Number: 12400
Gerrit-PatchSet: 1
Gerrit-Owner: Neels Hofmeyr <nhofmeyr at sysmocom.de>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20181221/ca447cd0/attachment.htm>