aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIvan Kluchnikov <kluchnikovi@gmail.com>2017-07-19 18:18:27 +0300
committerIvan Kluchnikov <kluchnikovi@gmail.com>2017-07-19 18:18:27 +0300
commit37885be945925f11601b1a5133a2a937810759d7 (patch)
tree1b64c4b8e8c6378c7698018f95fb05e05d1a34e0
parent73c4ac258dfdc691649b90203c08e606ac2ed4d5 (diff)
gsm_04_08: Implement support of placing an existing call on hold when another call comes in and switching to new call
In this case two transactions with links to the same lchan are in transaction list: * transaction for call on hold * transaction for active call. New condition was added for searching function to avoid selecting transaction which was put on hold and use active call transaction for rtp handling and handover procedures.
-rw-r--r--openbsc/src/libmsc/gsm_04_08.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/openbsc/src/libmsc/gsm_04_08.c b/openbsc/src/libmsc/gsm_04_08.c
index f6703c4cc..79d094170 100644
--- a/openbsc/src/libmsc/gsm_04_08.c
+++ b/openbsc/src/libmsc/gsm_04_08.c
@@ -3471,6 +3471,8 @@ static int tch_rtp_signal(struct gsm_lchan *lchan, int signal)
continue;
if (tmp->conn->lchan != lchan && tmp->conn->ho_lchan != lchan)
continue;
+ if (!tmp->tch_recv)
+ continue;
trans = tmp;
break;
}
@@ -3519,6 +3521,8 @@ static int ho_detect(struct gsm_lchan *lchan)
continue;
if (tmp->conn->lchan != lchan && tmp->conn->ho_lchan != lchan)
continue;
+ if (!tmp->tch_recv)
+ continue;
trans = tmp;
break;
}