mirror of
https://github.com/jambonz/jambonz-feature-server.git
synced 2025-12-21 17:17:58 +00:00
refactor answer logic to one location
This commit is contained in:
@@ -554,6 +554,36 @@ class CallSession extends Emitter {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Answer the call, if it has not already been answered.
|
||||||
|
*
|
||||||
|
* NB: This should be the one and only place we generate 200 OK to incoming INVITEs
|
||||||
|
*/
|
||||||
|
async propagateAnswer() {
|
||||||
|
if (!this.dlg) {
|
||||||
|
assert(this.ep);
|
||||||
|
this.dlg = await this.srf.createUAS(this.req, this.res, {localSdp: this.ep.local.sdp});
|
||||||
|
this.dlg.on('destroy', this._callerHungup.bind(this));
|
||||||
|
this.wrapDialog(this.dlg);
|
||||||
|
this.dlg.callSid = this.callSid;
|
||||||
|
this.emit('callStatusChange', {sipStatus: 200, callStatus: CallStatus.InProgress});
|
||||||
|
|
||||||
|
this.dlg.on('modify', this._onReinvite.bind(this));
|
||||||
|
|
||||||
|
this.logger.debug(`CallSession:propagateAnswer - answered callSid ${this.callSid}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async _onReinvite(req, res) {
|
||||||
|
try {
|
||||||
|
const newSdp = await this.ep.modify(req.body);
|
||||||
|
res.send(200, {body: newSdp});
|
||||||
|
this.logger.info({offer: req.body, answer: newSdp}, 'handling reINVITE');
|
||||||
|
} catch (err) {
|
||||||
|
this.logger.error(err, 'Error handling reinvite');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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
|
||||||
|
|||||||
@@ -33,20 +33,6 @@ class InboundCallSession extends CallSession {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Answer the call, if it has not already been answered.
|
|
||||||
*/
|
|
||||||
async propagateAnswer() {
|
|
||||||
if (!this.dlg) {
|
|
||||||
assert(this.ep);
|
|
||||||
this.dlg = await this.srf.createUAS(this.req, this.res, {localSdp: this.ep.local.sdp});
|
|
||||||
this.wrapDialog(this.dlg);
|
|
||||||
this.dlg.on('destroy', this._callerHungup.bind(this));
|
|
||||||
this.emit('callStatusChange', {sipStatus: 200, callStatus: CallStatus.InProgress});
|
|
||||||
this.logger.debug(`CallSession:propagateAnswer - answered callSid ${this.callSid}`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is invoked when the caller hangs up, in order to calculate the call duration.
|
* This is invoked when the caller hangs up, in order to calculate the call duration.
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user