jssip
Version:
the Javascript SIP library
109 lines (92 loc) • 2.35 kB
JavaScript
const EventEmitter = require('events').EventEmitter;
const JsSIP_C = require('../Constants');
const Exceptions = require('../Exceptions');
const Utils = require('../Utils');
module.exports = class Info extends EventEmitter
{
constructor(session)
{
super();
this._session = session;
this._direction = null;
this._contentType = null;
this._body = null;
}
get contentType()
{
return this._contentType;
}
get body()
{
return this._body;
}
send(contentType, body, options = {})
{
this._direction = 'outgoing';
if (contentType === undefined)
{
throw new TypeError('Not enough arguments');
}
// Check RTCSession Status.
if (this._session.status !== this._session.C.STATUS_CONFIRMED &&
this._session.status !== this._session.C.STATUS_WAITING_FOR_ACK)
{
throw new Exceptions.InvalidStateError(this._session.status);
}
this._contentType = contentType;
this._body = body;
const extraHeaders = Utils.cloneArray(options.extraHeaders);
extraHeaders.push(`Content-Type: ${contentType}`);
this._session.newInfo({
originator : 'local',
info : this,
request : this.request
});
this._session.sendRequest(JsSIP_C.INFO, {
extraHeaders,
eventHandlers : {
onSuccessResponse : (response) =>
{
this.emit('succeeded', {
originator : 'remote',
response
});
},
onErrorResponse : (response) =>
{
this.emit('failed', {
originator : 'remote',
response
});
},
onTransportError : () =>
{
this._session.onTransportError();
},
onRequestTimeout : () =>
{
this._session.onRequestTimeout();
},
onDialogError : () =>
{
this._session.onDialogError();
}
},
body
});
}
init_incoming(request)
{
this._direction = 'incoming';
this.request = request;
request.reply(200);
this._contentType = request.hasHeader('Content-Type') ?
request.getHeader('Content-Type').toLowerCase() : undefined;
this._body = request.body;
this._session.newInfo({
originator : 'remote',
info : this,
request
});
}
};