mirror of
https://github.com/jambonz/jambonz-feature-server.git
synced 2025-12-20 16:50:39 +00:00
bugix: re-invites after releasing media fail
This commit is contained in:
@@ -780,9 +780,19 @@ class CallSession extends Emitter {
|
|||||||
|
|
||||||
async _onReinvite(req, res) {
|
async _onReinvite(req, res) {
|
||||||
try {
|
try {
|
||||||
const newSdp = await this.ep.modify(req.body);
|
if (this.ep) {
|
||||||
res.send(200, {body: newSdp});
|
const newSdp = await this.ep.modify(req.body);
|
||||||
this.logger.info({offer: req.body, answer: newSdp}, 'handling reINVITE');
|
res.send(200, {body: newSdp});
|
||||||
|
this.logger.info({offer: req.body, answer: newSdp}, 'handling reINVITE');
|
||||||
|
}
|
||||||
|
else if (this.currentTask && this.currentTask.name === TaskName.Dial) {
|
||||||
|
this.logger.info('handling reINVITE after media has been released');
|
||||||
|
await this.currentTask.handleReinviteAfterMediaReleased(req, res);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.logger.info('got reINVITE but no endpoint and media has not been released');
|
||||||
|
res.send(488);
|
||||||
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
this.logger.error(err, 'Error handling reinvite');
|
this.logger.error(err, 'Error handling reinvite');
|
||||||
}
|
}
|
||||||
@@ -953,6 +963,13 @@ class CallSession extends Emitter {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async handleReinviteAfterMediaReleased(req, res) {
|
||||||
|
assert(this.dlg && this.dlg.connected && !this.ep);
|
||||||
|
const sdp = await this.dlg.modify(req.body);
|
||||||
|
this.logger.info({sdp}, 'CallSession:handleReinviteAfterMediaReleased - reinvite to A leg returned sdp');
|
||||||
|
res.send(200, {body: sdp});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called any time call status changes. This method both invokes the
|
* Called any time call status changes. This method both invokes the
|
||||||
* call_status_hook callback as well as updates the realtime database
|
* call_status_hook callback as well as updates the realtime database
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ const placeCall = require('../utils/place-outdial');
|
|||||||
const sessionTracker = require('../session/session-tracker');
|
const sessionTracker = require('../session/session-tracker');
|
||||||
const DtmfCollector = require('../utils/dtmf-collector');
|
const DtmfCollector = require('../utils/dtmf-collector');
|
||||||
const dbUtils = require('../utils/db-utils');
|
const dbUtils = require('../utils/db-utils');
|
||||||
|
const { rmSync } = require('fs');
|
||||||
const debug = require('debug')('jambonz:feature-server');
|
const debug = require('debug')('jambonz:feature-server');
|
||||||
|
|
||||||
function parseDtmfOptions(logger, dtmfCapture) {
|
function parseDtmfOptions(logger, dtmfCapture) {
|
||||||
@@ -437,6 +438,13 @@ class TaskDial extends Task {
|
|||||||
this.kill(cs);
|
this.kill(cs);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
.on('reinvite', (req, res) => {
|
||||||
|
try {
|
||||||
|
cs.handleReinviteAfterMediaReleased(req, res);
|
||||||
|
} catch (err) {
|
||||||
|
this.logger.error(err, 'Error in dial einvite from B leg');
|
||||||
|
}
|
||||||
|
})
|
||||||
.once('adulting', () => {
|
.once('adulting', () => {
|
||||||
/* child call just adulted and got its own session */
|
/* child call just adulted and got its own session */
|
||||||
this.logger.info('Dial:on_adulting: detaching child call leg');
|
this.logger.info('Dial:on_adulting: detaching child call leg');
|
||||||
@@ -563,6 +571,12 @@ class TaskDial extends Task {
|
|||||||
await Promise.all([sd.reAnchorMedia(), cs.reAnchorMedia()]);
|
await Promise.all([sd.reAnchorMedia(), cs.reAnchorMedia()]);
|
||||||
this.epOther = cs.ep;
|
this.epOther = cs.ep;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async handleReinviteAfterMediaReleased(req, res) {
|
||||||
|
const sdp = await this.dlg.modify(req.body);
|
||||||
|
this.logger.info({sdp}, 'Dial:handleReinviteAfterMediaReleased - sent reinvite to B leg');
|
||||||
|
res.send(200, {body: sdp});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = TaskDial;
|
module.exports = TaskDial;
|
||||||
|
|||||||
@@ -197,9 +197,15 @@ class SingleDialer extends Emitter {
|
|||||||
.on('refresh', () => this.logger.info('SingleDialer:exec - dialog refreshed by uas'))
|
.on('refresh', () => this.logger.info('SingleDialer:exec - dialog refreshed by uas'))
|
||||||
.on('modify', async(req, res) => {
|
.on('modify', async(req, res) => {
|
||||||
try {
|
try {
|
||||||
const newSdp = await this.ep.modify(req.body);
|
if (this.ep) {
|
||||||
res.send(200, {body: newSdp});
|
const newSdp = await this.ep.modify(req.body);
|
||||||
this.logger.info({offer: req.body, answer: newSdp}, 'SingleDialer:exec: handling reINVITE');
|
res.send(200, {body: newSdp});
|
||||||
|
this.logger.info({offer: req.body, answer: newSdp}, 'SingleDialer:exec: handling reINVITE');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.logger.info('SingleDialer:exec: handling reINVITE with released media, emit event');
|
||||||
|
this.emit('reinvite', req, res);
|
||||||
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
this.logger.error(err, 'Error handling reinvite');
|
this.logger.error(err, 'Error handling reinvite');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ networks:
|
|||||||
services:
|
services:
|
||||||
mysql:
|
mysql:
|
||||||
image: mysql:5.7
|
image: mysql:5.7
|
||||||
|
platform: linux/x86_64
|
||||||
ports:
|
ports:
|
||||||
- "3360:3306"
|
- "3360:3306"
|
||||||
environment:
|
environment:
|
||||||
|
|||||||
Reference in New Issue
Block a user