From bc414df510d17e230b471f8129cd87abc2f1d5e0 Mon Sep 17 00:00:00 2001 From: Stefan Knoblich Date: Mon, 17 Sep 2012 21:40:59 +0200 Subject: [PATCH] ftmod_misdn: Discard incoming audio data if b-channel is not active Silences the "Device or resource busy" error messages caused by the RX pipe filling up. Signed-off-by: Stefan Knoblich --- .../src/ftmod/ftmod_misdn/ftmod_misdn.c | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/libs/freetdm/src/ftmod/ftmod_misdn/ftmod_misdn.c b/libs/freetdm/src/ftmod/ftmod_misdn/ftmod_misdn.c index 84133601f3..d5fdc54bfc 100644 --- a/libs/freetdm/src/ftmod/ftmod_misdn/ftmod_misdn.c +++ b/libs/freetdm/src/ftmod/ftmod_misdn/ftmod_misdn.c @@ -2265,18 +2265,21 @@ static ftdm_status_t handle_b_channel_event(ftdm_channel_t *chan) int datalen = retval - MISDN_HEADER_LEN; char *data = buf + MISDN_HEADER_LEN; - /* Convert audio data */ - misdn_convert_audio_bits(data, datalen); + /* Discard incoming audio if not active */ + if (!priv->active) { + /* Convert audio data */ + misdn_convert_audio_bits(data, datalen); - /* Write audio into receive pipe */ - if ((retval = write(priv->rx_audio_pipe_in, data, datalen)) < 0) { - ftdm_log_chan(chan, FTDM_LOG_ERROR, "mISDN failed to write audio data into rx pipe: %s\n", - strerror(errno)); - return FTDM_FAIL; - } else if (retval < datalen) { - ftdm_log_chan(chan, FTDM_LOG_ERROR, "mISDN short write into rx pipe, written: %d, expected: %d\n", - retval, datalen); - return FTDM_FAIL; + /* Write audio into receive pipe */ + if ((retval = write(priv->rx_audio_pipe_in, data, datalen)) < 0) { + ftdm_log_chan(chan, FTDM_LOG_ERROR, "mISDN failed to write audio data into rx pipe: %s\n", + strerror(errno)); + return FTDM_FAIL; + } else if (retval < datalen) { + ftdm_log_chan(chan, FTDM_LOG_ERROR, "mISDN short write into rx pipe, written: %d, expected: %d\n", + retval, datalen); + return FTDM_FAIL; + } } /* Get receive buffer usage */