diff --git a/lib/call-session.js b/lib/call-session.js index db5fb72..7a05887 100644 --- a/lib/call-session.js +++ b/lib/call-session.js @@ -2,7 +2,7 @@ const Emitter = require('events'); const {makeRtpEngineOpts} = require('./utils'); const {forwardInDialogRequests} = require('drachtio-fn-b2b-sugar'); const {SipError} = require('drachtio-srf'); -const {parseUri} = require('drachtio-srf'); +const {parseUri, stringifyUri} = require('drachtio-srf'); const debug = require('debug')('jambonz:sbc-outbound'); /** @@ -66,14 +66,22 @@ class CallSession extends Emitter { }; if (this.req.locals.registration) { - debug(`sending call to user ${JSON.stringify(this.req.locals.registration)}`); + debug(`sending call to registered user ${JSON.stringify(this.req.locals.registration)}`); const contact = this.req.locals.registration.contact; + let destUri = this.req.uri; + if (this.req.has('X-Override-To')) { + const dest = this.req.get('X-Override-To'); + const uri = parseUri(contact); + uri.user = dest; + destUri = stringifyUri(uri); + this.logger.info(`overriding destination user with ${dest}, so final uri is ${destUri}`); + } if (contact.includes('transport=ws')) { uris = [contact]; } else { proxy = this.req.locals.registration.contact; - uris = [this.req.uri]; + uris = [destUri]; } } else if (this.req.locals.target === 'forward') {