From 5829ecdf4c34685cd283c06940459820732eeb18 Mon Sep 17 00:00:00 2001 From: Hoan Luu Huu <110280845+xquanluu@users.noreply.github.com> Date: Wed, 27 Mar 2024 18:25:07 +0700 Subject: [PATCH] fix cannot clear siprec sessions (#136) --- lib/call-session.js | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/lib/call-session.js b/lib/call-session.js index 7d07fb4..bac7552 100644 --- a/lib/call-session.js +++ b/lib/call-session.js @@ -775,8 +775,6 @@ Duration=${payload.duration} ` try { this._startRecordingNoAnswerTimer(res); await Promise.any(this.srsClients.map((c) => c.start())); - // Only take who success accept request. - this.srsClients = this.srsClients.filter((c) => c.activated); succeeded = true; } catch (err) { this.logger.error({err}, 'Error starting SipRec call recording'); @@ -784,14 +782,18 @@ Duration=${payload.duration} ` } } else if (reason === 'stopCallRecording') { - if (!this.srsClients.length) { + if (!this.srsClients.length || !this.srsClients.some((c) => c.activated)) { res.send(400); this.logger.info('discarding stopCallRecording request because we are not recording'); return; } try { this._startRecordingNoAnswerTimer(res); - await Promise.any(this.srsClients.map((c) => c.stop())); + await Promise.any(this.srsClients.map((c) => { + if (c.activated) { + c.stop(); + } + })); succeeded = true; } catch (err) { this.logger.error({err}, 'Error stopping SipRec call recording'); @@ -800,14 +802,18 @@ Duration=${payload.duration} ` this.srsClients = []; } else if (reason === 'pauseCallRecording') { - if (!this.srsClients.length || this.srsClients.every((c) => c.paused)) { + if (!this.srsClients.length || !this.srsClients.some((c) => c.activated && !c.paused)) { this.logger.info('discarding invalid pauseCallRecording request'); res.send(400); return; } try { this._startRecordingNoAnswerTimer(res); - await Promise.any(this.srsClients.map((c) => c.pause({headers}))); + await Promise.any(this.srsClients.map((c) => { + if (c.activated && !c.paused) { + c.pause({headers}); + } + })); succeeded = true; } catch (err) { this.logger.error({err}, 'Error pausing SipRec call recording'); @@ -815,14 +821,18 @@ Duration=${payload.duration} ` } } else if (reason === 'resumeCallRecording') { - if (!this.srsClients.length || !this.srsClients.every((c) => c.paused)) { + if (!this.srsClients.length || !this.srsClients.some((c) => c.activated && c.paused)) { res.send(400); this.logger.info('discarding invalid resumeCallRecording request'); return; } try { this._startRecordingNoAnswerTimer(res); - await Promise.any(this.srsClients.map((c) => c.resume({headers}))); + await Promise.any(this.srsClients.map((c) => { + if (c.activated && c.paused) { + c.resume({headers}); + } + })); succeeded = true; } catch (err) { this.logger.error({err}, 'Error resuming SipRec call recording');