From 11c7b93ca3c454c7cfd84892e4233a7034cc4a79 Mon Sep 17 00:00:00 2001 From: Perry Kundert Date: Fri, 21 Jun 2024 14:22:08 -0600 Subject: [PATCH] Initial pass at fixing navigator.mediaDevices --- dist/jssip.js | 7401 +++++++++++---------------------------------- dist/jssip.min.js | 4 +- lib/RTCSession.js | 34 +- package.json | 3 +- 4 files changed, 1850 insertions(+), 5592 deletions(-) diff --git a/dist/jssip.js b/dist/jssip.js index 97c924c4..27e2c3c1 100644 --- a/dist/jssip.js +++ b/dist/jssip.js @@ -1,7 +1,7 @@ /* * JsSIP v3.10.1 * the Javascript SIP library - * Copyright: 2012-2023 + * Copyright: 2012-2024 * Homepage: https://jssip.net * License: MIT */ @@ -9,25 +9,17 @@ (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.JsSIP = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } - -function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } - -function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } - +function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; } +function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } +function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } var Utils = require('./Utils'); - var JsSIP_C = require('./Constants'); - var Grammar = require('./Grammar'); - var URI = require('./URI'); - var Socket = require('./Socket'); +var Exceptions = require('./Exceptions'); -var Exceptions = require('./Exceptions'); // Default settings. - - +// Default settings. exports.settings = { // SIP authentication. authorization_user: null, @@ -51,6 +43,7 @@ exports.settings = { // Registration parameters. register: true, register_expires: 600, + register_from_tag_trail: '', registrar_server: null, // Connection options. sockets: null, @@ -58,14 +51,14 @@ exports.settings = { connection_recovery_min_interval: JsSIP_C.CONNECTION_RECOVERY_MIN_INTERVAL, // Global extra headers, to be added to every request and response extra_headers: null, - /* * Host address. * Value to be set in Via sent_by and host part of Contact FQDN. */ via_host: "".concat(Utils.createRandomToken(12), ".invalid") -}; // Configuration checks. +}; +// Configuration checks. var checks = { mandatory: { sockets: function sockets(_sockets2) { @@ -76,19 +69,16 @@ var checks = { * Array of Objects and Socket: [{socket: socket1}, socket2] */ var _sockets = []; - if (Socket.isSocket(_sockets2)) { _sockets.push({ socket: _sockets2 }); } else if (Array.isArray(_sockets2) && _sockets2.length) { var _iterator = _createForOfIteratorHelper(_sockets2), - _step; - + _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var socket = _step.value; - if (Object.prototype.hasOwnProperty.call(socket, 'socket') && Socket.isSocket(socket.socket)) { _sockets.push(socket); } else if (Socket.isSocket(socket)) { @@ -105,16 +95,13 @@ var checks = { } else { return; } - return _sockets; }, uri: function uri(_uri) { if (!/^sip:/i.test(_uri)) { _uri = "".concat(JsSIP_C.SIP, ":").concat(_uri); } - var parsed = URI.parse(_uri); - if (!parsed) { return; } else if (!parsed.user) { @@ -145,7 +132,6 @@ var checks = { connection_recovery_max_interval: function connection_recovery_max_interval(_connection_recovery_max_interval) { if (Utils.isDecimal(_connection_recovery_max_interval)) { var value = Number(_connection_recovery_max_interval); - if (value > 0) { return value; } @@ -154,7 +140,6 @@ var checks = { connection_recovery_min_interval: function connection_recovery_min_interval(_connection_recovery_min_interval) { if (Utils.isDecimal(_connection_recovery_min_interval)) { var value = Number(_connection_recovery_min_interval); - if (value > 0) { return value; } @@ -163,7 +148,6 @@ var checks = { contact_uri: function contact_uri(_contact_uri) { if (typeof _contact_uri === 'string') { var uri = Grammar.parse(_contact_uri, 'SIP_URI'); - if (uri !== -1) { return uri; } @@ -176,7 +160,6 @@ var checks = { if (/^uuid:/i.test(_instance_id)) { _instance_id = _instance_id.substr(5); } - if (Grammar.parse(_instance_id, 'uuid') === -1) { return; } else { @@ -186,7 +169,6 @@ var checks = { no_answer_timeout: function no_answer_timeout(_no_answer_timeout) { if (Utils.isDecimal(_no_answer_timeout)) { var value = Number(_no_answer_timeout); - if (value > 0) { return value; } @@ -200,7 +182,6 @@ var checks = { session_timers_refresh_method: function session_timers_refresh_method(method) { if (typeof method === 'string') { method = method.toUpperCase(); - if (method === JsSIP_C.INVITE || method === JsSIP_C.UPDATE) { return method; } @@ -228,19 +209,22 @@ var checks = { register_expires: function register_expires(_register_expires) { if (Utils.isDecimal(_register_expires)) { var value = Number(_register_expires); - if (value > 0) { return value; } } }, + register_from_tag_trail: function register_from_tag_trail(_register_from_tag_trail) { + if (typeof _register_from_tag_trail === 'function') { + return _register_from_tag_trail; + } + return String(_register_from_tag_trail); + }, registrar_server: function registrar_server(_registrar_server) { if (!/^sip:/i.test(_registrar_server)) { _registrar_server = "".concat(JsSIP_C.SIP, ":").concat(_registrar_server); } - var parsed = URI.parse(_registrar_server); - if (!parsed) { return; } else if (parsed.user) { @@ -256,15 +240,12 @@ var checks = { }, extra_headers: function extra_headers(_extra_headers) { var _extraHeaders = []; - if (Array.isArray(_extra_headers) && _extra_headers.length) { var _iterator2 = _createForOfIteratorHelper(_extra_headers), - _step2; - + _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var header = _step2.value; - if (typeof header === 'string') { _extraHeaders.push(header); } @@ -277,12 +258,10 @@ var checks = { } else { return; } - return _extraHeaders; } } }; - exports.load = function (dst, src) { // Check Mandatory parameters. for (var parameter in checks.mandatory) { @@ -291,29 +270,26 @@ exports.load = function (dst, src) { } else { var value = src[parameter]; var checked_value = checks.mandatory[parameter](value); - if (checked_value !== undefined) { dst[parameter] = checked_value; } else { throw new Exceptions.ConfigurationError(parameter, value); } } - } // Check Optional parameters. - + } + // Check Optional parameters. for (var _parameter in checks.optional) { if (src.hasOwnProperty(_parameter)) { var _value = src[_parameter]; + /* If the parameter value is null, empty string, undefined, empty array * or it's a number with NaN value, then apply its default value. */ - if (Utils.isEmpty(_value)) { continue; } - var _checked_value = checks.optional[_parameter](_value); - if (_checked_value !== undefined) { dst[_parameter] = _checked_value; } else { @@ -326,7 +302,6 @@ exports.load = function (dst, src) { "use strict"; var pkg = require('../package.json'); - module.exports = { USER_AGENT: "".concat(pkg.title, " ").concat(pkg.version), // SIP scheme. @@ -389,7 +364,6 @@ module.exports = { INFO: 'INFO', RFC2833: 'RFC2833' }, - /* SIP Response Reasons * DOC: https://www.iana.org/assignments/sip-parameters * Copied from https://github.com/versatica/OverSIP/blob/master/lib/oversip/sip/constants.rb#L7 @@ -501,63 +475,46 @@ module.exports = { },{"../package.json":40}],3:[function(require,module,exports){ "use strict"; -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } var Logger = require('./Logger'); - var SIPMessage = require('./SIPMessage'); - var JsSIP_C = require('./Constants'); - var Transactions = require('./Transactions'); - var Dialog_RequestSender = require('./Dialog/RequestSender'); - var Utils = require('./Utils'); - var logger = new Logger('Dialog'); var C = { // Dialog states. STATUS_EARLY: 1, STATUS_CONFIRMED: 2, STATUS_TERMINATED: 3 -}; // RFC 3261 12.1. +}; +// RFC 3261 12.1. module.exports = /*#__PURE__*/function () { - _createClass(Dialog, null, [{ - key: "C", - // Expose C object. - get: function get() { - return C; - } - }]); - function Dialog(owner, message, type) { var state = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : C.STATUS_CONFIRMED; - _classCallCheck(this, Dialog); - this._owner = owner; this._ua = owner._ua; this._uac_pending_reply = false; this._uas_pending_reply = false; - if (!message.hasHeader('contact')) { return { error: 'unable to create a Dialog without Contact header field' }; } - if (message instanceof SIPMessage.IncomingResponse) { state = message.status_code < 200 ? C.STATUS_EARLY : C.STATUS_CONFIRMED; } + var contact = message.parseHeader('contact'); - var contact = message.parseHeader('contact'); // RFC 3261 12.1.1. - + // RFC 3261 12.1.1. if (type === 'UAS') { this._id = { call_id: message.call_id, @@ -574,31 +531,60 @@ module.exports = /*#__PURE__*/function () { this._remote_target = contact.uri; this._route_set = message.getHeaders('record-route'); this._ack_seqnum = this._remote_seqnum; - } // RFC 3261 12.1.2. + } + // RFC 3261 12.1.2. else if (type === 'UAC') { - this._id = { - call_id: message.call_id, - local_tag: message.from_tag, - remote_tag: message.to_tag, - toString: function toString() { - return this.call_id + this.local_tag + this.remote_tag; - } - }; - this._state = state; - this._local_seqnum = message.cseq; - this._local_uri = message.parseHeader('from').uri; - this._remote_uri = message.parseHeader('to').uri; - this._remote_target = contact.uri; - this._route_set = message.getHeaders('record-route').reverse(); - this._ack_seqnum = null; - } - + this._id = { + call_id: message.call_id, + local_tag: message.from_tag, + remote_tag: message.to_tag, + toString: function toString() { + return this.call_id + this.local_tag + this.remote_tag; + } + }; + this._state = state; + this._local_seqnum = message.cseq; + this._local_uri = message.parseHeader('from').uri; + this._remote_uri = message.parseHeader('to').uri; + this._remote_target = contact.uri; + this._route_set = message.getHeaders('record-route').reverse(); + this._ack_seqnum = null; + } this._ua.newDialog(this); - logger.debug("new ".concat(type, " dialog created with status ").concat(this._state === C.STATUS_EARLY ? 'EARLY' : 'CONFIRMED')); } - - _createClass(Dialog, [{ + return _createClass(Dialog, [{ + key: "id", + get: function get() { + return this._id; + } + }, { + key: "local_seqnum", + get: function get() { + return this._local_seqnum; + }, + set: function set(num) { + this._local_seqnum = num; + } + }, { + key: "owner", + get: function get() { + return this._owner; + } + }, { + key: "uac_pending_reply", + get: function get() { + return this._uac_pending_reply; + }, + set: function set(pending) { + this._uac_pending_reply = pending; + } + }, { + key: "uas_pending_reply", + get: function get() { + return this._uas_pending_reply; + } + }, { key: "isTerminated", value: function isTerminated() { return this._status === C.STATUS_TERMINATED; @@ -608,7 +594,6 @@ module.exports = /*#__PURE__*/function () { value: function update(message, type) { this._state = C.STATUS_CONFIRMED; logger.debug("dialog ".concat(this._id.toString(), " changed to CONFIRMED state")); - if (type === 'UAC') { // RFC 3261 13.2.2.4. this._route_set = message.getHeaders('record-route').reverse(); @@ -618,31 +603,27 @@ module.exports = /*#__PURE__*/function () { key: "terminate", value: function terminate() { logger.debug("dialog ".concat(this._id.toString(), " deleted")); - this._ua.destroyDialog(this); - this._state = C.STATUS_TERMINATED; } }, { key: "sendRequest", value: function sendRequest(method) { var _this = this; - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var extraHeaders = Utils.cloneArray(options.extraHeaders); var eventHandlers = Utils.cloneObject(options.eventHandlers); var body = options.body || null; + var request = this._createRequest(method, extraHeaders, body); - var request = this._createRequest(method, extraHeaders, body); // Increase the local CSeq on authentication. - - + // Increase the local CSeq on authentication. eventHandlers.onAuthenticated = function () { _this._local_seqnum += 1; }; - var request_sender = new Dialog_RequestSender(this, request, eventHandlers); - request_sender.send(); // Return the instance of OutgoingRequest. + request_sender.send(); + // Return the instance of OutgoingRequest. return request; } }, { @@ -651,28 +632,27 @@ module.exports = /*#__PURE__*/function () { // Check in-dialog request. if (!this._checkInDialogRequest(request)) { return; - } // ACK received. Cleanup this._ack_seqnum. - + } + // ACK received. Cleanup this._ack_seqnum. if (request.method === JsSIP_C.ACK && this._ack_seqnum !== null) { this._ack_seqnum = null; - } // INVITE received. Set this._ack_seqnum. + } + // INVITE received. Set this._ack_seqnum. else if (request.method === JsSIP_C.INVITE) { - this._ack_seqnum = request.cseq; - } - + this._ack_seqnum = request.cseq; + } this._owner.receiveRequest(request); - } // RFC 3261 12.2.1.1. + } + // RFC 3261 12.2.1.1. }, { key: "_createRequest", value: function _createRequest(method, extraHeaders, body) { extraHeaders = Utils.cloneArray(extraHeaders); - if (!this._local_seqnum) { this._local_seqnum = Math.floor(Math.random() * 10000); } - var cseq = method === JsSIP_C.CANCEL || method === JsSIP_C.ACK ? this._local_seqnum : this._local_seqnum += 1; var request = new SIPMessage.OutgoingRequest(method, this._remote_target, this._ua, { 'cseq': cseq, @@ -684,13 +664,13 @@ module.exports = /*#__PURE__*/function () { 'route_set': this._route_set }, extraHeaders, body); return request; - } // RFC 3261 12.2.2. + } + // RFC 3261 12.2.2. }, { key: "_checkInDialogRequest", value: function _checkInDialogRequest(request) { var _this2 = this; - if (!this._remote_seqnum) { this._remote_seqnum = request.cseq; } else if (request.cseq < this._remote_seqnum) { @@ -706,9 +686,9 @@ module.exports = /*#__PURE__*/function () { } } else if (request.cseq > this._remote_seqnum) { this._remote_seqnum = request.cseq; - } // RFC3261 14.2 Modifying an Existing Session -UAS BEHAVIOR-. - + } + // RFC3261 14.2 Modifying an Existing Session -UAS BEHAVIOR-. if (request.method === JsSIP_C.INVITE || request.method === JsSIP_C.UPDATE && request.body) { if (this._uac_pending_reply === true) { request.reply(491); @@ -718,18 +698,16 @@ module.exports = /*#__PURE__*/function () { return false; } else { this._uas_pending_reply = true; - var stateChanged = function stateChanged() { if (request.server_transaction.state === Transactions.C.STATUS_ACCEPTED || request.server_transaction.state === Transactions.C.STATUS_COMPLETED || request.server_transaction.state === Transactions.C.STATUS_TERMINATED) { request.server_transaction.removeListener('stateChanged', stateChanged); _this2._uas_pending_reply = false; } }; - request.server_transaction.on('stateChanged', stateChanged); - } // RFC3261 12.2.2 Replace the dialog`s remote target URI if the request is accepted. - + } + // RFC3261 12.2.2 Replace the dialog`s remote target URI if the request is accepted. if (request.hasHeader('contact')) { request.server_transaction.on('stateChanged', function () { if (request.server_transaction.state === Transactions.C.STATUS_ACCEPTED) { @@ -747,60 +725,31 @@ module.exports = /*#__PURE__*/function () { }); } } - return true; } - }, { - key: "id", - get: function get() { - return this._id; - } - }, { - key: "local_seqnum", - get: function get() { - return this._local_seqnum; - }, - set: function set(num) { - this._local_seqnum = num; - } - }, { - key: "owner", - get: function get() { - return this._owner; - } - }, { - key: "uac_pending_reply", - get: function get() { - return this._uac_pending_reply; - }, - set: function set(pending) { - this._uac_pending_reply = pending; - } - }, { - key: "uas_pending_reply", - get: function get() { - return this._uas_pending_reply; + }], [{ + key: "C", + get: + // Expose C object. + function get() { + return C; } }]); - - return Dialog; }(); },{"./Constants":2,"./Dialog/RequestSender":4,"./Logger":9,"./SIPMessage":21,"./Transactions":24,"./Utils":28}],4:[function(require,module,exports){ "use strict"; -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } var JsSIP_C = require('../Constants'); - var Transactions = require('../Transactions'); +var RequestSender = require('../RequestSender'); -var RequestSender = require('../RequestSender'); // Default event handlers. - - +// Default event handlers. var EventHandlers = { onRequestTimeout: function onRequestTimeout() {}, onTransportError: function onTransportError() {}, @@ -809,19 +758,19 @@ var EventHandlers = { onAuthenticated: function onAuthenticated() {}, onDialogError: function onDialogError() {} }; - module.exports = /*#__PURE__*/function () { function DialogRequestSender(dialog, request, eventHandlers) { _classCallCheck(this, DialogRequestSender); - this._dialog = dialog; this._ua = dialog._ua; this._request = request; - this._eventHandlers = eventHandlers; // RFC3261 14.1 Modifying an Existing Session. UAC Behavior. + this._eventHandlers = eventHandlers; + // RFC3261 14.1 Modifying an Existing Session. UAC Behavior. this._reattempt = false; - this._reattemptTimer = null; // Define the undefined handlers. + this._reattemptTimer = null; + // Define the undefined handlers. for (var handler in EventHandlers) { if (Object.prototype.hasOwnProperty.call(EventHandlers, handler)) { if (!this._eventHandlers[handler]) { @@ -830,12 +779,15 @@ module.exports = /*#__PURE__*/function () { } } } - - _createClass(DialogRequestSender, [{ + return _createClass(DialogRequestSender, [{ + key: "request", + get: function get() { + return this._request; + } + }, { key: "send", value: function send() { var _this = this; - var request_sender = new RequestSender(this._ua, this._request, { onRequestTimeout: function onRequestTimeout() { _this._eventHandlers.onRequestTimeout(); @@ -850,18 +802,17 @@ module.exports = /*#__PURE__*/function () { _this._receiveResponse(response); } }); - request_sender.send(); // RFC3261 14.2 Modifying an Existing Session -UAC BEHAVIOR-. + request_sender.send(); + // RFC3261 14.2 Modifying an Existing Session -UAC BEHAVIOR-. if ((this._request.method === JsSIP_C.INVITE || this._request.method === JsSIP_C.UPDATE && this._request.body) && request_sender.clientTransaction.state !== Transactions.C.STATUS_TERMINATED) { this._dialog.uac_pending_reply = true; - var stateChanged = function stateChanged() { if (request_sender.clientTransaction.state === Transactions.C.STATUS_ACCEPTED || request_sender.clientTransaction.state === Transactions.C.STATUS_COMPLETED || request_sender.clientTransaction.state === Transactions.C.STATUS_TERMINATED) { request_sender.clientTransaction.removeListener('stateChanged', stateChanged); _this._dialog.uac_pending_reply = false; } }; - request_sender.clientTransaction.on('stateChanged', stateChanged); } } @@ -869,7 +820,6 @@ module.exports = /*#__PURE__*/function () { key: "_receiveResponse", value: function _receiveResponse(response) { var _this2 = this; - // RFC3261 12.2.1.2 408 or 481 is received for a request within a dialog. if (response.status_code === 408 || response.status_code === 481) { this._eventHandlers.onDialogError(response); @@ -885,7 +835,6 @@ module.exports = /*#__PURE__*/function () { this._reattemptTimer = setTimeout(function () { if (!_this2._dialog.isTerminated()) { _this2._reattempt = true; - _this2.send(); } }, 1000); @@ -896,34 +845,23 @@ module.exports = /*#__PURE__*/function () { this._eventHandlers.onErrorResponse(response); } } - }, { - key: "request", - get: function get() { - return this._request; - } }]); - - return DialogRequestSender; }(); },{"../Constants":2,"../RequestSender":20,"../Transactions":24}],5:[function(require,module,exports){ "use strict"; -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } var Logger = require('./Logger'); - var Utils = require('./Utils'); - var logger = new Logger('DigestAuthentication'); - module.exports = /*#__PURE__*/function () { function DigestAuthentication(credentials) { _classCallCheck(this, DigestAuthentication); - this._credentials = credentials; this._cnonce = null; this._nc = 0; @@ -939,43 +877,37 @@ module.exports = /*#__PURE__*/function () { this._ha1 = null; this._response = null; } - - _createClass(DigestAuthentication, [{ + return _createClass(DigestAuthentication, [{ key: "get", value: function get(parameter) { switch (parameter) { case 'realm': return this._realm; - case 'ha1': return this._ha1; - default: logger.warn('get() | cannot get "%s" parameter', parameter); return undefined; } } + /** * Performs Digest authentication given a SIP request and the challenge * received in a response to that request. * Returns true if auth was successfully generated, false otherwise. */ - }, { key: "authenticate", - value: function authenticate(_ref, challenge) - /* test interface */ - { + value: function authenticate(_ref, challenge) { var method = _ref.method, - ruri = _ref.ruri, - body = _ref.body; + ruri = _ref.ruri, + body = _ref.body; var cnonce = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; this._algorithm = challenge.algorithm; this._realm = challenge.realm; this._nonce = challenge.nonce; this._opaque = challenge.opaque; this._stale = challenge.stale; - if (this._algorithm) { if (this._algorithm !== 'MD5') { logger.warn('authenticate() | challenge with Digest algorithm different than "MD5", authentication aborted'); @@ -984,33 +916,31 @@ module.exports = /*#__PURE__*/function () { } else { this._algorithm = 'MD5'; } - if (!this._nonce) { logger.warn('authenticate() | challenge without Digest nonce, authentication aborted'); return false; } - if (!this._realm) { logger.warn('authenticate() | challenge without Digest realm, authentication aborted'); return false; - } // If no plain SIP password is provided. - + } + // If no plain SIP password is provided. if (!this._credentials.password) { // If ha1 is not provided we cannot authenticate. if (!this._credentials.ha1) { logger.warn('authenticate() | no plain SIP password nor ha1 provided, authentication aborted'); return false; - } // If the realm does not match the stored realm we cannot authenticate. - + } + // If the realm does not match the stored realm we cannot authenticate. if (this._credentials.realm !== this._realm) { logger.warn('authenticate() | no plain SIP password, and stored `realm` does not match the given `realm`, cannot authenticate [stored:"%s", given:"%s"]', this._credentials.realm, this._realm); return false; } - } // 'qop' can contain a list of values (Array). Let's choose just one. - + } + // 'qop' can contain a list of values (Array). Let's choose just one. if (challenge.qop) { if (challenge.qop.indexOf('auth-int') > -1) { this._qop = 'auth-int'; @@ -1023,134 +953,117 @@ module.exports = /*#__PURE__*/function () { } } else { this._qop = null; - } // Fill other attributes. + } + // Fill other attributes. this._method = method; this._uri = ruri; this._cnonce = cnonce || Utils.createRandomToken(12); this._nc += 1; var hex = Number(this._nc).toString(16); - this._ncHex = '00000000'.substr(0, 8 - hex.length) + hex; // Nc-value = 8LHEX. Max value = 'FFFFFFFF'. + this._ncHex = '00000000'.substr(0, 8 - hex.length) + hex; + // Nc-value = 8LHEX. Max value = 'FFFFFFFF'. if (this._nc === 4294967296) { this._nc = 1; this._ncHex = '00000001'; - } // Calculate the Digest "response" value. - // If we have plain SIP password then regenerate ha1. + } + // Calculate the Digest "response" value. + // If we have plain SIP password then regenerate ha1. if (this._credentials.password) { // HA1 = MD5(A1) = MD5(username:realm:password). this._ha1 = Utils.calculateMD5("".concat(this._credentials.username, ":").concat(this._realm, ":").concat(this._credentials.password)); - } // Otherwise reuse the stored ha1. + } + // Otherwise reuse the stored ha1. else { - this._ha1 = this._credentials.ha1; - } - + this._ha1 = this._credentials.ha1; + } var a2; var ha2; - if (this._qop === 'auth') { // HA2 = MD5(A2) = MD5(method:digestURI). a2 = "".concat(this._method, ":").concat(this._uri); ha2 = Utils.calculateMD5(a2); - logger.debug('authenticate() | using qop=auth [a2:"%s"]', a2); // Response = MD5(HA1:nonce:nonceCount:credentialsNonce:qop:HA2). + logger.debug('authenticate() | using qop=auth [a2:"%s"]', a2); + // Response = MD5(HA1:nonce:nonceCount:credentialsNonce:qop:HA2). this._response = Utils.calculateMD5("".concat(this._ha1, ":").concat(this._nonce, ":").concat(this._ncHex, ":").concat(this._cnonce, ":auth:").concat(ha2)); } else if (this._qop === 'auth-int') { // HA2 = MD5(A2) = MD5(method:digestURI:MD5(entityBody)). a2 = "".concat(this._method, ":").concat(this._uri, ":").concat(Utils.calculateMD5(body ? body : '')); ha2 = Utils.calculateMD5(a2); - logger.debug('authenticate() | using qop=auth-int [a2:"%s"]', a2); // Response = MD5(HA1:nonce:nonceCount:credentialsNonce:qop:HA2). + logger.debug('authenticate() | using qop=auth-int [a2:"%s"]', a2); + // Response = MD5(HA1:nonce:nonceCount:credentialsNonce:qop:HA2). this._response = Utils.calculateMD5("".concat(this._ha1, ":").concat(this._nonce, ":").concat(this._ncHex, ":").concat(this._cnonce, ":auth-int:").concat(ha2)); } else if (this._qop === null) { // HA2 = MD5(A2) = MD5(method:digestURI). a2 = "".concat(this._method, ":").concat(this._uri); ha2 = Utils.calculateMD5(a2); - logger.debug('authenticate() | using qop=null [a2:"%s"]', a2); // Response = MD5(HA1:nonce:HA2). + logger.debug('authenticate() | using qop=null [a2:"%s"]', a2); + // Response = MD5(HA1:nonce:HA2). this._response = Utils.calculateMD5("".concat(this._ha1, ":").concat(this._nonce, ":").concat(ha2)); } - logger.debug('authenticate() | response generated'); return true; } + /** * Return the Proxy-Authorization or WWW-Authorization header value. */ - }, { key: "toString", value: function toString() { var auth_params = []; - if (!this._response) { throw new Error('response field does not exist, cannot generate Authorization header'); } - auth_params.push("algorithm=".concat(this._algorithm)); auth_params.push("username=\"".concat(this._credentials.username, "\"")); auth_params.push("realm=\"".concat(this._realm, "\"")); auth_params.push("nonce=\"".concat(this._nonce, "\"")); auth_params.push("uri=\"".concat(this._uri, "\"")); auth_params.push("response=\"".concat(this._response, "\"")); - if (this._opaque) { auth_params.push("opaque=\"".concat(this._opaque, "\"")); } - if (this._qop) { auth_params.push("qop=".concat(this._qop)); auth_params.push("cnonce=\"".concat(this._cnonce, "\"")); auth_params.push("nc=".concat(this._ncHex)); } - return "Digest ".concat(auth_params.join(', ')); } }]); - - return DigestAuthentication; }(); },{"./Logger":9,"./Utils":28}],6:[function(require,module,exports){ "use strict"; -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } - -function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } - -function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - -function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - -function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); } - -function _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); } - -function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } - -function _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; } - -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } - -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _wrapNativeSuper(t) { var r = "function" == typeof Map ? new Map() : void 0; return _wrapNativeSuper = function _wrapNativeSuper(t) { if (null === t || !_isNativeFunction(t)) return t; if ("function" != typeof t) throw new TypeError("Super expression must either be null or a function"); if (void 0 !== r) { if (r.has(t)) return r.get(t); r.set(t, Wrapper); } function Wrapper() { return _construct(t, arguments, _getPrototypeOf(this).constructor); } return Wrapper.prototype = Object.create(t.prototype, { constructor: { value: Wrapper, enumerable: !1, writable: !0, configurable: !0 } }), _setPrototypeOf(Wrapper, t); }, _wrapNativeSuper(t); } +function _construct(t, e, r) { if (_isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments); var o = [null]; o.push.apply(o, e); var p = new (t.bind.apply(t, o))(); return r && _setPrototypeOf(p, r.prototype), p; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _isNativeFunction(t) { try { return -1 !== Function.toString.call(t).indexOf("[native code]"); } catch (n) { return "function" == typeof t; } } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } var ConfigurationError = /*#__PURE__*/function (_Error) { - _inherits(ConfigurationError, _Error); - - var _super = _createSuper(ConfigurationError); - function ConfigurationError(parameter, value) { var _this; - _classCallCheck(this, ConfigurationError); - - _this = _super.call(this); + _this = _callSuper(this, ConfigurationError); _this.code = 1; _this.name = 'CONFIGURATION_ERROR'; _this.parameter = parameter; @@ -1158,71 +1071,49 @@ var ConfigurationError = /*#__PURE__*/function (_Error) { _this.message = !_this.value ? "Missing parameter: ".concat(_this.parameter) : "Invalid value ".concat(JSON.stringify(_this.value), " for parameter \"").concat(_this.parameter, "\""); return _this; } - - return ConfigurationError; + _inherits(ConfigurationError, _Error); + return _createClass(ConfigurationError); }( /*#__PURE__*/_wrapNativeSuper(Error)); - var InvalidStateError = /*#__PURE__*/function (_Error2) { - _inherits(InvalidStateError, _Error2); - - var _super2 = _createSuper(InvalidStateError); - function InvalidStateError(status) { var _this2; - _classCallCheck(this, InvalidStateError); - - _this2 = _super2.call(this); + _this2 = _callSuper(this, InvalidStateError); _this2.code = 2; _this2.name = 'INVALID_STATE_ERROR'; _this2.status = status; _this2.message = "Invalid status: ".concat(status); return _this2; } - - return InvalidStateError; + _inherits(InvalidStateError, _Error2); + return _createClass(InvalidStateError); }( /*#__PURE__*/_wrapNativeSuper(Error)); - var NotSupportedError = /*#__PURE__*/function (_Error3) { - _inherits(NotSupportedError, _Error3); - - var _super3 = _createSuper(NotSupportedError); - function NotSupportedError(message) { var _this3; - _classCallCheck(this, NotSupportedError); - - _this3 = _super3.call(this); + _this3 = _callSuper(this, NotSupportedError); _this3.code = 3; _this3.name = 'NOT_SUPPORTED_ERROR'; _this3.message = message; return _this3; } - - return NotSupportedError; + _inherits(NotSupportedError, _Error3); + return _createClass(NotSupportedError); }( /*#__PURE__*/_wrapNativeSuper(Error)); - var NotReadyError = /*#__PURE__*/function (_Error4) { - _inherits(NotReadyError, _Error4); - - var _super4 = _createSuper(NotReadyError); - function NotReadyError(message) { var _this4; - _classCallCheck(this, NotReadyError); - - _this4 = _super4.call(this); + _this4 = _callSuper(this, NotReadyError); _this4.code = 4; _this4.name = 'NOT_READY_ERROR'; _this4.message = message; return _this4; } - - return NotReadyError; + _inherits(NotReadyError, _Error4); + return _createClass(NotReadyError); }( /*#__PURE__*/_wrapNativeSuper(Error)); - module.exports = { ConfigurationError: ConfigurationError, InvalidStateError: InvalidStateError, @@ -1258,7 +1149,6 @@ module.exports = function () { .replace(/\r/g, '\\r') // carriage return .replace(/[\x00-\x07\x0B\x0E-\x1F\x80-\uFFFF]/g, escape) + '"'; } - var result = { /* * Parses the input with a generated parser. If the parsing is successfull, @@ -1495,7 +1385,6 @@ module.exports = function () { "from_tag": parse_from_tag, "early_flag": parse_early_flag }; - if (startRule !== undefined) { if (parseFunctions[startRule] === undefined) { throw new Error("Invalid rule name: " + quote(startRule) + "."); @@ -1503,28 +1392,22 @@ module.exports = function () { } else { startRule = "CRLF"; } - var pos = 0; var reportFailures = 0; var rightmostFailuresPos = 0; var rightmostFailuresExpected = []; - function padLeft(input, padding, length) { var result = input; var padLength = length - input.length; - for (var i = 0; i < padLength; i++) { result = padding + result; } - return result; } - function escape(ch) { var charCode = ch.charCodeAt(0); var escapeChar; var length; - if (charCode <= 0xFF) { escapeChar = 'x'; length = 2; @@ -1532,304 +1415,240 @@ module.exports = function () { escapeChar = 'u'; length = 4; } - return '\\' + escapeChar + padLeft(charCode.toString(16).toUpperCase(), '0', length); } - function matchFailed(failure) { if (pos < rightmostFailuresPos) { return; } - if (pos > rightmostFailuresPos) { rightmostFailuresPos = pos; rightmostFailuresExpected = []; } - rightmostFailuresExpected.push(failure); } - function parse_CRLF() { var result0; - if (input.substr(pos, 2) === "\r\n") { result0 = "\r\n"; pos += 2; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"\\r\\n\""); } } - return result0; } - function parse_DIGIT() { var result0; - if (/^[0-9]/.test(input.charAt(pos))) { result0 = input.charAt(pos); pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("[0-9]"); } } - return result0; } - function parse_ALPHA() { var result0; - if (/^[a-zA-Z]/.test(input.charAt(pos))) { result0 = input.charAt(pos); pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("[a-zA-Z]"); } } - return result0; } - function parse_HEXDIG() { var result0; - if (/^[0-9a-fA-F]/.test(input.charAt(pos))) { result0 = input.charAt(pos); pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("[0-9a-fA-F]"); } } - return result0; } - function parse_WSP() { var result0; result0 = parse_SP(); - if (result0 === null) { result0 = parse_HTAB(); } - return result0; } - function parse_OCTET() { var result0; - if (/^[\0-\xFF]/.test(input.charAt(pos))) { result0 = input.charAt(pos); pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("[\\0-\\xFF]"); } } - return result0; } - function parse_DQUOTE() { var result0; - if (/^["]/.test(input.charAt(pos))) { result0 = input.charAt(pos); pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("[\"]"); } } - return result0; } - function parse_SP() { var result0; - if (input.charCodeAt(pos) === 32) { result0 = " "; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\" \""); } } - return result0; } - function parse_HTAB() { var result0; - if (input.charCodeAt(pos) === 9) { result0 = "\t"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"\\t\""); } } - return result0; } - function parse_alphanum() { var result0; - if (/^[a-zA-Z0-9]/.test(input.charAt(pos))) { result0 = input.charAt(pos); pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("[a-zA-Z0-9]"); } } - return result0; } - function parse_reserved() { var result0; - if (input.charCodeAt(pos) === 59) { result0 = ";"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\";\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 47) { result0 = "/"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"/\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 63) { result0 = "?"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"?\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 58) { result0 = ":"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 64) { result0 = "@"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"@\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 38) { result0 = "&"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"&\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 61) { result0 = "="; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"=\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 43) { result0 = "+"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"+\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 36) { result0 = "$"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"$\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 44) { result0 = ","; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\",\""); } @@ -1843,126 +1662,103 @@ module.exports = function () { } } } - return result0; } - function parse_unreserved() { var result0; result0 = parse_alphanum(); - if (result0 === null) { result0 = parse_mark(); } - return result0; } - function parse_mark() { var result0; - if (input.charCodeAt(pos) === 45) { result0 = "-"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"-\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 95) { result0 = "_"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"_\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 46) { result0 = "."; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\".\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 33) { result0 = "!"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"!\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 126) { result0 = "~"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"~\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 42) { result0 = "*"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"*\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 39) { result0 = "'"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"'\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 40) { result0 = "("; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"(\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 41) { result0 = ")"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\")\""); } @@ -1975,33 +1771,26 @@ module.exports = function () { } } } - return result0; } - function parse_escaped() { var result0, result1, result2; var pos0, pos1; pos0 = pos; pos1 = pos; - if (input.charCodeAt(pos) === 37) { result0 = "%"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"%\""); } } - if (result0 !== null) { result1 = parse_HEXDIG(); - if (result1 !== null) { result2 = parse_HEXDIG(); - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -2016,20 +1805,16 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset, escaped) { return escaped.join(''); }(pos0, result0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_LWS() { var result0, result1, result2; var pos0, pos1, pos2; @@ -2038,15 +1823,12 @@ module.exports = function () { pos2 = pos; result0 = []; result1 = parse_WSP(); - while (result1 !== null) { result0.push(result1); result1 = parse_WSP(); } - if (result0 !== null) { result1 = parse_CRLF(); - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -2057,15 +1839,11 @@ module.exports = function () { result0 = null; pos = pos2; } - result0 = result0 !== null ? result0 : ""; - if (result0 !== null) { result2 = parse_WSP(); - if (result2 !== null) { result1 = []; - while (result2 !== null) { result1.push(result2); result2 = parse_WSP(); @@ -2073,7 +1851,6 @@ module.exports = function () { } else { result1 = null; } - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -2084,27 +1861,22 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset) { return " "; }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_SWS() { var result0; result0 = parse_LWS(); result0 = result0 !== null ? result0 : ""; return result0; } - function parse_HCOLON() { var result0, result1, result2; var pos0, pos1; @@ -2112,35 +1884,28 @@ module.exports = function () { pos1 = pos; result0 = []; result1 = parse_SP(); - if (result1 === null) { result1 = parse_HTAB(); } - while (result1 !== null) { result0.push(result1); result1 = parse_SP(); - if (result1 === null) { result1 = parse_HTAB(); } } - if (result0 !== null) { if (input.charCodeAt(pos) === 58) { result1 = ":"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result1 !== null) { result2 = parse_SWS(); - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -2155,30 +1920,24 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset) { return ':'; }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_TEXT_UTF8_TRIM() { var result0, result1, result2, result3; var pos0, pos1, pos2; pos0 = pos; pos1 = pos; result1 = parse_TEXT_UTF8char(); - if (result1 !== null) { result0 = []; - while (result1 !== null) { result0.push(result1); result1 = parse_TEXT_UTF8char(); @@ -2186,21 +1945,17 @@ module.exports = function () { } else { result0 = null; } - if (result0 !== null) { result1 = []; pos2 = pos; result2 = []; result3 = parse_LWS(); - while (result3 !== null) { result2.push(result3); result3 = parse_LWS(); } - if (result2 !== null) { result3 = parse_TEXT_UTF8char(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -2211,21 +1966,17 @@ module.exports = function () { result2 = null; pos = pos2; } - while (result2 !== null) { result1.push(result2); pos2 = pos; result2 = []; result3 = parse_LWS(); - while (result3 !== null) { result2.push(result3); result3 = parse_LWS(); } - if (result2 !== null) { result3 = parse_TEXT_UTF8char(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -2237,7 +1988,6 @@ module.exports = function () { pos = pos2; } } - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -2248,216 +1998,175 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset) { return input.substring(pos, offset); }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_TEXT_UTF8char() { var result0; - if (/^[!-~]/.test(input.charAt(pos))) { result0 = input.charAt(pos); pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("[!-~]"); } } - if (result0 === null) { result0 = parse_UTF8_NONASCII(); } - return result0; } - function parse_UTF8_NONASCII() { var result0; - if (/^[\x80-\uFFFF]/.test(input.charAt(pos))) { result0 = input.charAt(pos); pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("[\\x80-\\uFFFF]"); } } - return result0; } - function parse_UTF8_CONT() { var result0; - if (/^[\x80-\xBF]/.test(input.charAt(pos))) { result0 = input.charAt(pos); pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("[\\x80-\\xBF]"); } } - return result0; } - function parse_LHEX() { var result0; result0 = parse_DIGIT(); - if (result0 === null) { if (/^[a-f]/.test(input.charAt(pos))) { result0 = input.charAt(pos); pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("[a-f]"); } } } - return result0; } - function parse_token() { var result0, result1; var pos0; pos0 = pos; result1 = parse_alphanum(); - if (result1 === null) { if (input.charCodeAt(pos) === 45) { result1 = "-"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"-\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 46) { result1 = "."; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\".\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 33) { result1 = "!"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"!\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 37) { result1 = "%"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"%\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 42) { result1 = "*"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"*\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 95) { result1 = "_"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"_\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 43) { result1 = "+"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"+\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 96) { result1 = "`"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"`\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 39) { result1 = "'"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"'\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 126) { result1 = "~"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"~\""); } @@ -2472,129 +2181,107 @@ module.exports = function () { } } } - if (result1 !== null) { result0 = []; - while (result1 !== null) { result0.push(result1); result1 = parse_alphanum(); - if (result1 === null) { if (input.charCodeAt(pos) === 45) { result1 = "-"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"-\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 46) { result1 = "."; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\".\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 33) { result1 = "!"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"!\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 37) { result1 = "%"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"%\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 42) { result1 = "*"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"*\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 95) { result1 = "_"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"_\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 43) { result1 = "+"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"+\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 96) { result1 = "`"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"`\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 39) { result1 = "'"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"'\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 126) { result1 = "~"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"~\""); } @@ -2613,129 +2300,107 @@ module.exports = function () { } else { result0 = null; } - if (result0 !== null) { result0 = function (offset) { return input.substring(pos, offset); }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_token_nodot() { var result0, result1; var pos0; pos0 = pos; result1 = parse_alphanum(); - if (result1 === null) { if (input.charCodeAt(pos) === 45) { result1 = "-"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"-\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 33) { result1 = "!"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"!\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 37) { result1 = "%"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"%\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 42) { result1 = "*"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"*\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 95) { result1 = "_"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"_\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 43) { result1 = "+"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"+\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 96) { result1 = "`"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"`\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 39) { result1 = "'"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"'\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 126) { result1 = "~"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"~\""); } @@ -2749,117 +2414,97 @@ module.exports = function () { } } } - if (result1 !== null) { result0 = []; - while (result1 !== null) { result0.push(result1); result1 = parse_alphanum(); - if (result1 === null) { if (input.charCodeAt(pos) === 45) { result1 = "-"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"-\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 33) { result1 = "!"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"!\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 37) { result1 = "%"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"%\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 42) { result1 = "*"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"*\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 95) { result1 = "_"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"_\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 43) { result1 = "+"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"+\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 96) { result1 = "`"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"`\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 39) { result1 = "'"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"'\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 126) { result1 = "~"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"~\""); } @@ -2877,220 +2522,181 @@ module.exports = function () { } else { result0 = null; } - if (result0 !== null) { result0 = function (offset) { return input.substring(pos, offset); }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_separators() { var result0; - if (input.charCodeAt(pos) === 40) { result0 = "("; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"(\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 41) { result0 = ")"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\")\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 60) { result0 = "<"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"<\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 62) { result0 = ">"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\">\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 64) { result0 = "@"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"@\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 44) { result0 = ","; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\",\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 59) { result0 = ";"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\";\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 58) { result0 = ":"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 92) { result0 = "\\"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"\\\\\""); } } - if (result0 === null) { result0 = parse_DQUOTE(); - if (result0 === null) { if (input.charCodeAt(pos) === 47) { result0 = "/"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"/\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 91) { result0 = "["; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"[\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 93) { result0 = "]"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"]\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 63) { result0 = "?"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"?\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 61) { result0 = "="; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"=\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 123) { result0 = "{"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"{\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 125) { result0 = "}"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"}\""); } } - if (result0 === null) { result0 = parse_SP(); - if (result0 === null) { result0 = parse_HTAB(); } @@ -3111,278 +2717,231 @@ module.exports = function () { } } } - return result0; } - function parse_word() { var result0, result1; var pos0; pos0 = pos; result1 = parse_alphanum(); - if (result1 === null) { if (input.charCodeAt(pos) === 45) { result1 = "-"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"-\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 46) { result1 = "."; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\".\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 33) { result1 = "!"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"!\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 37) { result1 = "%"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"%\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 42) { result1 = "*"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"*\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 95) { result1 = "_"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"_\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 43) { result1 = "+"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"+\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 96) { result1 = "`"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"`\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 39) { result1 = "'"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"'\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 126) { result1 = "~"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"~\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 40) { result1 = "("; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"(\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 41) { result1 = ")"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\")\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 60) { result1 = "<"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"<\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 62) { result1 = ">"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\">\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 58) { result1 = ":"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 92) { result1 = "\\"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"\\\\\""); } } - if (result1 === null) { result1 = parse_DQUOTE(); - if (result1 === null) { if (input.charCodeAt(pos) === 47) { result1 = "/"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"/\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 91) { result1 = "["; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"[\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 93) { result1 = "]"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"]\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 63) { result1 = "?"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"?\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 123) { result1 = "{"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"{\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 125) { result1 = "}"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"}\""); } @@ -3410,276 +2969,229 @@ module.exports = function () { } } } - if (result1 !== null) { result0 = []; - while (result1 !== null) { result0.push(result1); result1 = parse_alphanum(); - if (result1 === null) { if (input.charCodeAt(pos) === 45) { result1 = "-"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"-\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 46) { result1 = "."; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\".\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 33) { result1 = "!"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"!\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 37) { result1 = "%"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"%\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 42) { result1 = "*"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"*\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 95) { result1 = "_"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"_\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 43) { result1 = "+"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"+\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 96) { result1 = "`"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"`\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 39) { result1 = "'"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"'\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 126) { result1 = "~"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"~\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 40) { result1 = "("; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"(\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 41) { result1 = ")"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\")\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 60) { result1 = "<"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"<\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 62) { result1 = ">"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\">\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 58) { result1 = ":"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 92) { result1 = "\\"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"\\\\\""); } } - if (result1 === null) { result1 = parse_DQUOTE(); - if (result1 === null) { if (input.charCodeAt(pos) === 47) { result1 = "/"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"/\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 91) { result1 = "["; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"[\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 93) { result1 = "]"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"]\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 63) { result1 = "?"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"?\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 123) { result1 = "{"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"{\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 125) { result1 = "}"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"}\""); } @@ -3711,42 +3223,34 @@ module.exports = function () { } else { result0 = null; } - if (result0 !== null) { result0 = function (offset) { return input.substring(pos, offset); }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_STAR() { var result0, result1, result2; var pos0, pos1; pos0 = pos; pos1 = pos; result0 = parse_SWS(); - if (result0 !== null) { if (input.charCodeAt(pos) === 42) { result1 = "*"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"*\""); } } - if (result1 !== null) { result2 = parse_SWS(); - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -3761,42 +3265,34 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset) { return "*"; }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_SLASH() { var result0, result1, result2; var pos0, pos1; pos0 = pos; pos1 = pos; result0 = parse_SWS(); - if (result0 !== null) { if (input.charCodeAt(pos) === 47) { result1 = "/"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"/\""); } } - if (result1 !== null) { result2 = parse_SWS(); - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -3811,42 +3307,34 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset) { return "/"; }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_EQUAL() { var result0, result1, result2; var pos0, pos1; pos0 = pos; pos1 = pos; result0 = parse_SWS(); - if (result0 !== null) { if (input.charCodeAt(pos) === 61) { result1 = "="; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"=\""); } } - if (result1 !== null) { result2 = parse_SWS(); - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -3861,42 +3349,34 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset) { return "="; }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_LPAREN() { var result0, result1, result2; var pos0, pos1; pos0 = pos; pos1 = pos; result0 = parse_SWS(); - if (result0 !== null) { if (input.charCodeAt(pos) === 40) { result1 = "("; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"(\""); } } - if (result1 !== null) { result2 = parse_SWS(); - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -3911,42 +3391,34 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset) { return "("; }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_RPAREN() { var result0, result1, result2; var pos0, pos1; pos0 = pos; pos1 = pos; result0 = parse_SWS(); - if (result0 !== null) { if (input.charCodeAt(pos) === 41) { result1 = ")"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\")\""); } } - if (result1 !== null) { result2 = parse_SWS(); - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -3961,40 +3433,32 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset) { return ")"; }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_RAQUOT() { var result0, result1; var pos0, pos1; pos0 = pos; pos1 = pos; - if (input.charCodeAt(pos) === 62) { result0 = ">"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\">\""); } } - if (result0 !== null) { result1 = parse_SWS(); - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -4005,39 +3469,32 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset) { return ">"; }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_LAQUOT() { var result0, result1; var pos0, pos1; pos0 = pos; pos1 = pos; result0 = parse_SWS(); - if (result0 !== null) { if (input.charCodeAt(pos) === 60) { result1 = "<"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"<\""); } } - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -4048,42 +3505,34 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset) { return "<"; }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_COMMA() { var result0, result1, result2; var pos0, pos1; pos0 = pos; pos1 = pos; result0 = parse_SWS(); - if (result0 !== null) { if (input.charCodeAt(pos) === 44) { result1 = ","; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\",\""); } } - if (result1 !== null) { result2 = parse_SWS(); - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -4098,42 +3547,34 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset) { return ","; }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_SEMI() { var result0, result1, result2; var pos0, pos1; pos0 = pos; pos1 = pos; result0 = parse_SWS(); - if (result0 !== null) { if (input.charCodeAt(pos) === 59) { result1 = ";"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\";\""); } } - if (result1 !== null) { result2 = parse_SWS(); - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -4148,42 +3589,34 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset) { return ";"; }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_COLON() { var result0, result1, result2; var pos0, pos1; pos0 = pos; pos1 = pos; result0 = parse_SWS(); - if (result0 !== null) { if (input.charCodeAt(pos) === 58) { result1 = ":"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result1 !== null) { result2 = parse_SWS(); - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -4198,30 +3631,24 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset) { return ":"; }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_LDQUOT() { var result0, result1; var pos0, pos1; pos0 = pos; pos1 = pos; result0 = parse_SWS(); - if (result0 !== null) { result1 = parse_DQUOTE(); - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -4232,30 +3659,24 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset) { return "\""; }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_RDQUOT() { var result0, result1; var pos0, pos1; pos0 = pos; pos1 = pos; result0 = parse_DQUOTE(); - if (result0 !== null) { result1 = parse_SWS(); - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -4266,54 +3687,42 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset) { return "\""; }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_comment() { var result0, result1, result2; var pos0; pos0 = pos; result0 = parse_LPAREN(); - if (result0 !== null) { result1 = []; result2 = parse_ctext(); - if (result2 === null) { result2 = parse_quoted_pair(); - if (result2 === null) { result2 = parse_comment(); } } - while (result2 !== null) { result1.push(result2); result2 = parse_ctext(); - if (result2 === null) { result2 = parse_quoted_pair(); - if (result2 === null) { result2 = parse_comment(); } } } - if (result1 !== null) { result2 = parse_RPAREN(); - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -4328,91 +3737,72 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_ctext() { var result0; - if (/^[!-']/.test(input.charAt(pos))) { result0 = input.charAt(pos); pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("[!-']"); } } - if (result0 === null) { if (/^[*-[]/.test(input.charAt(pos))) { result0 = input.charAt(pos); pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("[*-[]"); } } - if (result0 === null) { if (/^[\]-~]/.test(input.charAt(pos))) { result0 = input.charAt(pos); pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("[\\]-~]"); } } - if (result0 === null) { result0 = parse_UTF8_NONASCII(); - if (result0 === null) { result0 = parse_LWS(); } } } } - return result0; } - function parse_quoted_string() { var result0, result1, result2, result3; var pos0, pos1; pos0 = pos; pos1 = pos; result0 = parse_SWS(); - if (result0 !== null) { result1 = parse_DQUOTE(); - if (result1 !== null) { result2 = []; result3 = parse_qdtext(); - if (result3 === null) { result3 = parse_quoted_pair(); } - while (result3 !== null) { result2.push(result3); result3 = parse_qdtext(); - if (result3 === null) { result3 = parse_quoted_pair(); } } - if (result2 !== null) { result3 = parse_DQUOTE(); - if (result3 !== null) { result0 = [result0, result1, result2, result3]; } else { @@ -4431,50 +3821,39 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset) { return input.substring(pos, offset); }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_quoted_string_clean() { var result0, result1, result2, result3; var pos0, pos1; pos0 = pos; pos1 = pos; result0 = parse_SWS(); - if (result0 !== null) { result1 = parse_DQUOTE(); - if (result1 !== null) { result2 = []; result3 = parse_qdtext(); - if (result3 === null) { result3 = parse_quoted_pair(); } - while (result3 !== null) { result2.push(result3); result3 = parse_qdtext(); - if (result3 === null) { result3 = parse_quoted_pair(); } } - if (result2 !== null) { result3 = parse_DQUOTE(); - if (result3 !== null) { result0 = [result0, result1, result2, result3]; } else { @@ -4493,7 +3872,6 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset) { var trimmed = input.substring(pos, offset).trim(); @@ -4501,118 +3879,97 @@ module.exports = function () { .replace(/\\([\x00-\x09\x0b-\x0c\x0e-\x7f])/g, '$1'); }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_qdtext() { var result0; result0 = parse_LWS(); - if (result0 === null) { if (input.charCodeAt(pos) === 33) { result0 = "!"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"!\""); } } - if (result0 === null) { if (/^[#-[]/.test(input.charAt(pos))) { result0 = input.charAt(pos); pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("[#-[]"); } } - if (result0 === null) { if (/^[\]-~]/.test(input.charAt(pos))) { result0 = input.charAt(pos); pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("[\\]-~]"); } } - if (result0 === null) { result0 = parse_UTF8_NONASCII(); } } } } - return result0; } - function parse_quoted_pair() { var result0, result1; var pos0; pos0 = pos; - if (input.charCodeAt(pos) === 92) { result0 = "\\"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"\\\\\""); } } - if (result0 !== null) { if (/^[\0-\t]/.test(input.charAt(pos))) { result1 = input.charAt(pos); pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("[\\0-\\t]"); } } - if (result1 === null) { if (/^[\x0B-\f]/.test(input.charAt(pos))) { result1 = input.charAt(pos); pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("[\\x0B-\\f]"); } } - if (result1 === null) { if (/^[\x0E-]/.test(input.charAt(pos))) { result1 = input.charAt(pos); pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("[\\x0E-]"); } } } } - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -4623,36 +3980,29 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_SIP_URI_noparams() { var result0, result1, result2, result3; var pos0, pos1; pos0 = pos; pos1 = pos; result0 = parse_uri_scheme(); - if (result0 !== null) { if (input.charCodeAt(pos) === 58) { result1 = ":"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result1 !== null) { result2 = parse_userinfo(); result2 = result2 !== null ? result2 : ""; - if (result2 !== null) { result3 = parse_hostport(); - if (result3 !== null) { result0 = [result0, result1, result2, result3]; } else { @@ -4671,7 +4021,6 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset) { try { @@ -4686,47 +4035,37 @@ module.exports = function () { } }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_SIP_URI() { var result0, result1, result2, result3, result4, result5; var pos0, pos1; pos0 = pos; pos1 = pos; result0 = parse_uri_scheme(); - if (result0 !== null) { if (input.charCodeAt(pos) === 58) { result1 = ":"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result1 !== null) { result2 = parse_userinfo(); result2 = result2 !== null ? result2 : ""; - if (result2 !== null) { result3 = parse_hostport(); - if (result3 !== null) { result4 = parse_uri_parameters(); - if (result4 !== null) { result5 = parse_headers(); result5 = result5 !== null ? result5 : ""; - if (result5 !== null) { result0 = [result0, result1, result2, result3, result4, result5]; } else { @@ -4753,11 +4092,9 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset) { var header; - try { data.uri = new URI(data.scheme, data.user, data.host, data.port, data.uri_params, data.uri_headers); delete data.scheme; @@ -4766,7 +4103,6 @@ module.exports = function () { delete data.host_type; delete data.port; delete data.uri_params; - if (startRule === 'SIP_URI') { data = data.uri; } @@ -4775,107 +4111,84 @@ module.exports = function () { } }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_uri_scheme() { var result0; result0 = parse_uri_scheme_sips(); - if (result0 === null) { result0 = parse_uri_scheme_sip(); } - return result0; } - function parse_uri_scheme_sips() { var result0; var pos0; pos0 = pos; - if (input.substr(pos, 4).toLowerCase() === "sips") { result0 = input.substr(pos, 4); pos += 4; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"sips\""); } } - if (result0 !== null) { result0 = function (offset, scheme) { data.scheme = scheme.toLowerCase(); }(pos0, result0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_uri_scheme_sip() { var result0; var pos0; pos0 = pos; - if (input.substr(pos, 3).toLowerCase() === "sip") { result0 = input.substr(pos, 3); pos += 3; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"sip\""); } } - if (result0 !== null) { result0 = function (offset, scheme) { data.scheme = scheme.toLowerCase(); }(pos0, result0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_userinfo() { var result0, result1, result2; var pos0, pos1, pos2; pos0 = pos; pos1 = pos; result0 = parse_user(); - if (result0 !== null) { pos2 = pos; - if (input.charCodeAt(pos) === 58) { result1 = ":"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result1 !== null) { result2 = parse_password(); - if (result2 !== null) { result1 = [result1, result2]; } else { @@ -4886,21 +4199,17 @@ module.exports = function () { result1 = null; pos = pos2; } - result1 = result1 !== null ? result1 : ""; - if (result1 !== null) { if (input.charCodeAt(pos) === 64) { result2 = "@"; pos++; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\"@\""); } } - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -4915,42 +4224,32 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset) { data.user = decodeURIComponent(input.substring(pos - 1, offset)); }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_user() { var result0, result1; result1 = parse_unreserved(); - if (result1 === null) { result1 = parse_escaped(); - if (result1 === null) { result1 = parse_user_unreserved(); } } - if (result1 !== null) { result0 = []; - while (result1 !== null) { result0.push(result1); result1 = parse_unreserved(); - if (result1 === null) { result1 = parse_escaped(); - if (result1 === null) { result1 = parse_user_unreserved(); } @@ -4959,103 +4258,85 @@ module.exports = function () { } else { result0 = null; } - return result0; } - function parse_user_unreserved() { var result0; - if (input.charCodeAt(pos) === 38) { result0 = "&"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"&\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 61) { result0 = "="; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"=\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 43) { result0 = "+"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"+\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 36) { result0 = "$"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"$\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 44) { result0 = ","; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\",\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 59) { result0 = ";"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\";\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 63) { result0 = "?"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"?\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 47) { result0 = "/"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"/\""); } @@ -5067,75 +4348,62 @@ module.exports = function () { } } } - return result0; } - function parse_password() { var result0, result1; var pos0; pos0 = pos; result0 = []; result1 = parse_unreserved(); - if (result1 === null) { result1 = parse_escaped(); - if (result1 === null) { if (input.charCodeAt(pos) === 38) { result1 = "&"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"&\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 61) { result1 = "="; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"=\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 43) { result1 = "+"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"+\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 36) { result1 = "$"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"$\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 44) { result1 = ","; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\",\""); } @@ -5146,69 +4414,57 @@ module.exports = function () { } } } - while (result1 !== null) { result0.push(result1); result1 = parse_unreserved(); - if (result1 === null) { result1 = parse_escaped(); - if (result1 === null) { if (input.charCodeAt(pos) === 38) { result1 = "&"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"&\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 61) { result1 = "="; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"=\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 43) { result1 = "+"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"+\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 36) { result1 = "$"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"$\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 44) { result1 = ","; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\",\""); } @@ -5220,43 +4476,34 @@ module.exports = function () { } } } - if (result0 !== null) { result0 = function (offset) { data.password = input.substring(pos, offset); }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_hostport() { var result0, result1, result2; var pos0, pos1; pos0 = pos; result0 = parse_host(); - if (result0 !== null) { pos1 = pos; - if (input.charCodeAt(pos) === 58) { result1 = ":"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result1 !== null) { result2 = parse_port(); - if (result2 !== null) { result1 = [result1, result2]; } else { @@ -5267,9 +4514,7 @@ module.exports = function () { result1 = null; pos = pos1; } - result1 = result1 !== null ? result1 : ""; - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -5280,38 +4525,30 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_host() { var result0; var pos0; pos0 = pos; result0 = parse_hostname(); - if (result0 === null) { result0 = parse_IPv4address(); - if (result0 === null) { result0 = parse_IPv6reference(); } } - if (result0 !== null) { result0 = function (offset) { data.host = input.substring(pos, offset).toLowerCase(); return data.host; }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_hostname() { var result0, result1, result2; var pos0, pos1, pos2; @@ -5320,19 +4557,16 @@ module.exports = function () { result0 = []; pos2 = pos; result1 = parse_domainlabel(); - if (result1 !== null) { if (input.charCodeAt(pos) === 46) { result2 = "."; pos++; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\".\""); } } - if (result2 !== null) { result1 = [result1, result2]; } else { @@ -5343,24 +4577,20 @@ module.exports = function () { result1 = null; pos = pos2; } - while (result1 !== null) { result0.push(result1); pos2 = pos; result1 = parse_domainlabel(); - if (result1 !== null) { if (input.charCodeAt(pos) === 46) { result2 = "."; pos++; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\".\""); } } - if (result2 !== null) { result1 = [result1, result2]; } else { @@ -5372,24 +4602,19 @@ module.exports = function () { pos = pos2; } } - if (result0 !== null) { result1 = parse_toplabel(); - if (result1 !== null) { if (input.charCodeAt(pos) === 46) { result2 = "."; pos++; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\".\""); } } - result2 = result2 !== null ? result2 : ""; - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -5404,80 +4629,66 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset) { data.host_type = 'domain'; return input.substring(pos, offset); }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_domainlabel() { var result0, result1, result2; var pos0; pos0 = pos; result0 = parse_alphanum(); - if (result0 !== null) { result1 = []; result2 = parse_alphanum(); - if (result2 === null) { if (input.charCodeAt(pos) === 45) { result2 = "-"; pos++; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\"-\""); } } - if (result2 === null) { if (input.charCodeAt(pos) === 95) { result2 = "_"; pos++; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\"_\""); } } } } - while (result2 !== null) { result1.push(result2); result2 = parse_alphanum(); - if (result2 === null) { if (input.charCodeAt(pos) === 45) { result2 = "-"; pos++; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\"-\""); } } - if (result2 === null) { if (input.charCodeAt(pos) === 95) { result2 = "_"; pos++; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\"_\""); } @@ -5485,7 +4696,6 @@ module.exports = function () { } } } - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -5496,69 +4706,57 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_toplabel() { var result0, result1, result2; var pos0; pos0 = pos; result0 = parse_ALPHA(); - if (result0 !== null) { result1 = []; result2 = parse_alphanum(); - if (result2 === null) { if (input.charCodeAt(pos) === 45) { result2 = "-"; pos++; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\"-\""); } } - if (result2 === null) { if (input.charCodeAt(pos) === 95) { result2 = "_"; pos++; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\"_\""); } } } } - while (result2 !== null) { result1.push(result2); result2 = parse_alphanum(); - if (result2 === null) { if (input.charCodeAt(pos) === 45) { result2 = "-"; pos++; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\"-\""); } } - if (result2 === null) { if (input.charCodeAt(pos) === 95) { result2 = "_"; pos++; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\"_\""); } @@ -5566,7 +4764,6 @@ module.exports = function () { } } } - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -5577,42 +4774,34 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_IPv6reference() { var result0, result1, result2; var pos0, pos1; pos0 = pos; pos1 = pos; - if (input.charCodeAt(pos) === 91) { result0 = "["; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"[\""); } } - if (result0 !== null) { result1 = parse_IPv6address(); - if (result1 !== null) { if (input.charCodeAt(pos) === 93) { result2 = "]"; pos++; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\"]\""); } } - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -5627,118 +4816,95 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset) { data.host_type = 'IPv6'; return input.substring(pos, offset); }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_IPv6address() { var result0, result1, result2, result3, result4, result5, result6, result7, result8, result9, result10, result11, result12; var pos0, pos1, pos2; pos0 = pos; pos1 = pos; result0 = parse_h16(); - if (result0 !== null) { if (input.charCodeAt(pos) === 58) { result1 = ":"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result1 !== null) { result2 = parse_h16(); - if (result2 !== null) { if (input.charCodeAt(pos) === 58) { result3 = ":"; pos++; } else { result3 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result3 !== null) { result4 = parse_h16(); - if (result4 !== null) { if (input.charCodeAt(pos) === 58) { result5 = ":"; pos++; } else { result5 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result5 !== null) { result6 = parse_h16(); - if (result6 !== null) { if (input.charCodeAt(pos) === 58) { result7 = ":"; pos++; } else { result7 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result7 !== null) { result8 = parse_h16(); - if (result8 !== null) { if (input.charCodeAt(pos) === 58) { result9 = ":"; pos++; } else { result9 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result9 !== null) { result10 = parse_h16(); - if (result10 !== null) { if (input.charCodeAt(pos) === 58) { result11 = ":"; pos++; } else { result11 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result11 !== null) { result12 = parse_ls32(); - if (result12 !== null) { result0 = [result0, result1, result2, result3, result4, result5, result6, result7, result8, result9, result10, result11, result12]; } else { @@ -5793,99 +4959,79 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 === null) { pos1 = pos; - if (input.substr(pos, 2) === "::") { result0 = "::"; pos += 2; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"::\""); } } - if (result0 !== null) { result1 = parse_h16(); - if (result1 !== null) { if (input.charCodeAt(pos) === 58) { result2 = ":"; pos++; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result2 !== null) { result3 = parse_h16(); - if (result3 !== null) { if (input.charCodeAt(pos) === 58) { result4 = ":"; pos++; } else { result4 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result4 !== null) { result5 = parse_h16(); - if (result5 !== null) { if (input.charCodeAt(pos) === 58) { result6 = ":"; pos++; } else { result6 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result6 !== null) { result7 = parse_h16(); - if (result7 !== null) { if (input.charCodeAt(pos) === 58) { result8 = ":"; pos++; } else { result8 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result8 !== null) { result9 = parse_h16(); - if (result9 !== null) { if (input.charCodeAt(pos) === 58) { result10 = ":"; pos++; } else { result10 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result10 !== null) { result11 = parse_ls32(); - if (result11 !== null) { result0 = [result0, result1, result2, result3, result4, result5, result6, result7, result8, result9, result10, result11]; } else { @@ -5936,84 +5082,67 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 === null) { pos1 = pos; - if (input.substr(pos, 2) === "::") { result0 = "::"; pos += 2; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"::\""); } } - if (result0 !== null) { result1 = parse_h16(); - if (result1 !== null) { if (input.charCodeAt(pos) === 58) { result2 = ":"; pos++; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result2 !== null) { result3 = parse_h16(); - if (result3 !== null) { if (input.charCodeAt(pos) === 58) { result4 = ":"; pos++; } else { result4 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result4 !== null) { result5 = parse_h16(); - if (result5 !== null) { if (input.charCodeAt(pos) === 58) { result6 = ":"; pos++; } else { result6 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result6 !== null) { result7 = parse_h16(); - if (result7 !== null) { if (input.charCodeAt(pos) === 58) { result8 = ":"; pos++; } else { result8 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result8 !== null) { result9 = parse_ls32(); - if (result9 !== null) { result0 = [result0, result1, result2, result3, result4, result5, result6, result7, result8, result9]; } else { @@ -6056,69 +5185,55 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 === null) { pos1 = pos; - if (input.substr(pos, 2) === "::") { result0 = "::"; pos += 2; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"::\""); } } - if (result0 !== null) { result1 = parse_h16(); - if (result1 !== null) { if (input.charCodeAt(pos) === 58) { result2 = ":"; pos++; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result2 !== null) { result3 = parse_h16(); - if (result3 !== null) { if (input.charCodeAt(pos) === 58) { result4 = ":"; pos++; } else { result4 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result4 !== null) { result5 = parse_h16(); - if (result5 !== null) { if (input.charCodeAt(pos) === 58) { result6 = ":"; pos++; } else { result6 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result6 !== null) { result7 = parse_ls32(); - if (result7 !== null) { result0 = [result0, result1, result2, result3, result4, result5, result6, result7]; } else { @@ -6153,54 +5268,43 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 === null) { pos1 = pos; - if (input.substr(pos, 2) === "::") { result0 = "::"; pos += 2; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"::\""); } } - if (result0 !== null) { result1 = parse_h16(); - if (result1 !== null) { if (input.charCodeAt(pos) === 58) { result2 = ":"; pos++; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result2 !== null) { result3 = parse_h16(); - if (result3 !== null) { if (input.charCodeAt(pos) === 58) { result4 = ":"; pos++; } else { result4 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result4 !== null) { result5 = parse_ls32(); - if (result5 !== null) { result0 = [result0, result1, result2, result3, result4, result5]; } else { @@ -6227,39 +5331,31 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 === null) { pos1 = pos; - if (input.substr(pos, 2) === "::") { result0 = "::"; pos += 2; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"::\""); } } - if (result0 !== null) { result1 = parse_h16(); - if (result1 !== null) { if (input.charCodeAt(pos) === 58) { result2 = ":"; pos++; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result2 !== null) { result3 = parse_ls32(); - if (result3 !== null) { result0 = [result0, result1, result2, result3]; } else { @@ -6278,24 +5374,19 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 === null) { pos1 = pos; - if (input.substr(pos, 2) === "::") { result0 = "::"; pos += 2; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"::\""); } } - if (result0 !== null) { result1 = parse_ls32(); - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -6306,24 +5397,19 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 === null) { pos1 = pos; - if (input.substr(pos, 2) === "::") { result0 = "::"; pos += 2; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"::\""); } } - if (result0 !== null) { result1 = parse_h16(); - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -6334,86 +5420,69 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 === null) { pos1 = pos; result0 = parse_h16(); - if (result0 !== null) { if (input.substr(pos, 2) === "::") { result1 = "::"; pos += 2; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"::\""); } } - if (result1 !== null) { result2 = parse_h16(); - if (result2 !== null) { if (input.charCodeAt(pos) === 58) { result3 = ":"; pos++; } else { result3 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result3 !== null) { result4 = parse_h16(); - if (result4 !== null) { if (input.charCodeAt(pos) === 58) { result5 = ":"; pos++; } else { result5 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result5 !== null) { result6 = parse_h16(); - if (result6 !== null) { if (input.charCodeAt(pos) === 58) { result7 = ":"; pos++; } else { result7 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result7 !== null) { result8 = parse_h16(); - if (result8 !== null) { if (input.charCodeAt(pos) === 58) { result9 = ":"; pos++; } else { result9 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result9 !== null) { result10 = parse_ls32(); - if (result10 !== null) { result0 = [result0, result1, result2, result3, result4, result5, result6, result7, result8, result9, result10]; } else { @@ -6460,28 +5529,22 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 === null) { pos1 = pos; result0 = parse_h16(); - if (result0 !== null) { pos2 = pos; - if (input.charCodeAt(pos) === 58) { result1 = ":"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result1 !== null) { result2 = parse_h16(); - if (result2 !== null) { result1 = [result1, result2]; } else { @@ -6492,69 +5555,55 @@ module.exports = function () { result1 = null; pos = pos2; } - result1 = result1 !== null ? result1 : ""; - if (result1 !== null) { if (input.substr(pos, 2) === "::") { result2 = "::"; pos += 2; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\"::\""); } } - if (result2 !== null) { result3 = parse_h16(); - if (result3 !== null) { if (input.charCodeAt(pos) === 58) { result4 = ":"; pos++; } else { result4 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result4 !== null) { result5 = parse_h16(); - if (result5 !== null) { if (input.charCodeAt(pos) === 58) { result6 = ":"; pos++; } else { result6 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result6 !== null) { result7 = parse_h16(); - if (result7 !== null) { if (input.charCodeAt(pos) === 58) { result8 = ":"; pos++; } else { result8 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result8 !== null) { result9 = parse_ls32(); - if (result9 !== null) { result0 = [result0, result1, result2, result3, result4, result5, result6, result7, result8, result9]; } else { @@ -6597,28 +5646,22 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 === null) { pos1 = pos; result0 = parse_h16(); - if (result0 !== null) { pos2 = pos; - if (input.charCodeAt(pos) === 58) { result1 = ":"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result1 !== null) { result2 = parse_h16(); - if (result2 !== null) { result1 = [result1, result2]; } else { @@ -6629,26 +5672,20 @@ module.exports = function () { result1 = null; pos = pos2; } - result1 = result1 !== null ? result1 : ""; - if (result1 !== null) { pos2 = pos; - if (input.charCodeAt(pos) === 58) { result2 = ":"; pos++; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result2 !== null) { result3 = parse_h16(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -6659,54 +5696,43 @@ module.exports = function () { result2 = null; pos = pos2; } - result2 = result2 !== null ? result2 : ""; - if (result2 !== null) { if (input.substr(pos, 2) === "::") { result3 = "::"; pos += 2; } else { result3 = null; - if (reportFailures === 0) { matchFailed("\"::\""); } } - if (result3 !== null) { result4 = parse_h16(); - if (result4 !== null) { if (input.charCodeAt(pos) === 58) { result5 = ":"; pos++; } else { result5 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result5 !== null) { result6 = parse_h16(); - if (result6 !== null) { if (input.charCodeAt(pos) === 58) { result7 = ":"; pos++; } else { result7 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result7 !== null) { result8 = parse_ls32(); - if (result8 !== null) { result0 = [result0, result1, result2, result3, result4, result5, result6, result7, result8]; } else { @@ -6745,28 +5771,22 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 === null) { pos1 = pos; result0 = parse_h16(); - if (result0 !== null) { pos2 = pos; - if (input.charCodeAt(pos) === 58) { result1 = ":"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result1 !== null) { result2 = parse_h16(); - if (result2 !== null) { result1 = [result1, result2]; } else { @@ -6777,26 +5797,20 @@ module.exports = function () { result1 = null; pos = pos2; } - result1 = result1 !== null ? result1 : ""; - if (result1 !== null) { pos2 = pos; - if (input.charCodeAt(pos) === 58) { result2 = ":"; pos++; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result2 !== null) { result3 = parse_h16(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -6807,26 +5821,20 @@ module.exports = function () { result2 = null; pos = pos2; } - result2 = result2 !== null ? result2 : ""; - if (result2 !== null) { pos2 = pos; - if (input.charCodeAt(pos) === 58) { result3 = ":"; pos++; } else { result3 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result3 !== null) { result4 = parse_h16(); - if (result4 !== null) { result3 = [result3, result4]; } else { @@ -6837,39 +5845,31 @@ module.exports = function () { result3 = null; pos = pos2; } - result3 = result3 !== null ? result3 : ""; - if (result3 !== null) { if (input.substr(pos, 2) === "::") { result4 = "::"; pos += 2; } else { result4 = null; - if (reportFailures === 0) { matchFailed("\"::\""); } } - if (result4 !== null) { result5 = parse_h16(); - if (result5 !== null) { if (input.charCodeAt(pos) === 58) { result6 = ":"; pos++; } else { result6 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result6 !== null) { result7 = parse_ls32(); - if (result7 !== null) { result0 = [result0, result1, result2, result3, result4, result5, result6, result7]; } else { @@ -6904,28 +5904,22 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 === null) { pos1 = pos; result0 = parse_h16(); - if (result0 !== null) { pos2 = pos; - if (input.charCodeAt(pos) === 58) { result1 = ":"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result1 !== null) { result2 = parse_h16(); - if (result2 !== null) { result1 = [result1, result2]; } else { @@ -6936,26 +5930,20 @@ module.exports = function () { result1 = null; pos = pos2; } - result1 = result1 !== null ? result1 : ""; - if (result1 !== null) { pos2 = pos; - if (input.charCodeAt(pos) === 58) { result2 = ":"; pos++; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result2 !== null) { result3 = parse_h16(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -6966,26 +5954,20 @@ module.exports = function () { result2 = null; pos = pos2; } - result2 = result2 !== null ? result2 : ""; - if (result2 !== null) { pos2 = pos; - if (input.charCodeAt(pos) === 58) { result3 = ":"; pos++; } else { result3 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result3 !== null) { result4 = parse_h16(); - if (result4 !== null) { result3 = [result3, result4]; } else { @@ -6996,26 +5978,20 @@ module.exports = function () { result3 = null; pos = pos2; } - result3 = result3 !== null ? result3 : ""; - if (result3 !== null) { pos2 = pos; - if (input.charCodeAt(pos) === 58) { result4 = ":"; pos++; } else { result4 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result4 !== null) { result5 = parse_h16(); - if (result5 !== null) { result4 = [result4, result5]; } else { @@ -7026,24 +6002,19 @@ module.exports = function () { result4 = null; pos = pos2; } - result4 = result4 !== null ? result4 : ""; - if (result4 !== null) { if (input.substr(pos, 2) === "::") { result5 = "::"; pos += 2; } else { result5 = null; - if (reportFailures === 0) { matchFailed("\"::\""); } } - if (result5 !== null) { result6 = parse_ls32(); - if (result6 !== null) { result0 = [result0, result1, result2, result3, result4, result5, result6]; } else { @@ -7074,28 +6045,22 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 === null) { pos1 = pos; result0 = parse_h16(); - if (result0 !== null) { pos2 = pos; - if (input.charCodeAt(pos) === 58) { result1 = ":"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result1 !== null) { result2 = parse_h16(); - if (result2 !== null) { result1 = [result1, result2]; } else { @@ -7106,26 +6071,20 @@ module.exports = function () { result1 = null; pos = pos2; } - result1 = result1 !== null ? result1 : ""; - if (result1 !== null) { pos2 = pos; - if (input.charCodeAt(pos) === 58) { result2 = ":"; pos++; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result2 !== null) { result3 = parse_h16(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -7136,26 +6095,20 @@ module.exports = function () { result2 = null; pos = pos2; } - result2 = result2 !== null ? result2 : ""; - if (result2 !== null) { pos2 = pos; - if (input.charCodeAt(pos) === 58) { result3 = ":"; pos++; } else { result3 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result3 !== null) { result4 = parse_h16(); - if (result4 !== null) { result3 = [result3, result4]; } else { @@ -7166,26 +6119,20 @@ module.exports = function () { result3 = null; pos = pos2; } - result3 = result3 !== null ? result3 : ""; - if (result3 !== null) { pos2 = pos; - if (input.charCodeAt(pos) === 58) { result4 = ":"; pos++; } else { result4 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result4 !== null) { result5 = parse_h16(); - if (result5 !== null) { result4 = [result4, result5]; } else { @@ -7196,26 +6143,20 @@ module.exports = function () { result4 = null; pos = pos2; } - result4 = result4 !== null ? result4 : ""; - if (result4 !== null) { pos2 = pos; - if (input.charCodeAt(pos) === 58) { result5 = ":"; pos++; } else { result5 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result5 !== null) { result6 = parse_h16(); - if (result6 !== null) { result5 = [result5, result6]; } else { @@ -7226,24 +6167,19 @@ module.exports = function () { result5 = null; pos = pos2; } - result5 = result5 !== null ? result5 : ""; - if (result5 !== null) { if (input.substr(pos, 2) === "::") { result6 = "::"; pos += 2; } else { result6 = null; - if (reportFailures === 0) { matchFailed("\"::\""); } } - if (result6 !== null) { result7 = parse_h16(); - if (result7 !== null) { result0 = [result0, result1, result2, result3, result4, result5, result6, result7]; } else { @@ -7278,28 +6214,22 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 === null) { pos1 = pos; result0 = parse_h16(); - if (result0 !== null) { pos2 = pos; - if (input.charCodeAt(pos) === 58) { result1 = ":"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result1 !== null) { result2 = parse_h16(); - if (result2 !== null) { result1 = [result1, result2]; } else { @@ -7310,26 +6240,20 @@ module.exports = function () { result1 = null; pos = pos2; } - result1 = result1 !== null ? result1 : ""; - if (result1 !== null) { pos2 = pos; - if (input.charCodeAt(pos) === 58) { result2 = ":"; pos++; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result2 !== null) { result3 = parse_h16(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -7340,26 +6264,20 @@ module.exports = function () { result2 = null; pos = pos2; } - result2 = result2 !== null ? result2 : ""; - if (result2 !== null) { pos2 = pos; - if (input.charCodeAt(pos) === 58) { result3 = ":"; pos++; } else { result3 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result3 !== null) { result4 = parse_h16(); - if (result4 !== null) { result3 = [result3, result4]; } else { @@ -7370,26 +6288,20 @@ module.exports = function () { result3 = null; pos = pos2; } - result3 = result3 !== null ? result3 : ""; - if (result3 !== null) { pos2 = pos; - if (input.charCodeAt(pos) === 58) { result4 = ":"; pos++; } else { result4 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result4 !== null) { result5 = parse_h16(); - if (result5 !== null) { result4 = [result4, result5]; } else { @@ -7400,26 +6312,20 @@ module.exports = function () { result4 = null; pos = pos2; } - result4 = result4 !== null ? result4 : ""; - if (result4 !== null) { pos2 = pos; - if (input.charCodeAt(pos) === 58) { result5 = ":"; pos++; } else { result5 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result5 !== null) { result6 = parse_h16(); - if (result6 !== null) { result5 = [result5, result6]; } else { @@ -7430,26 +6336,20 @@ module.exports = function () { result5 = null; pos = pos2; } - result5 = result5 !== null ? result5 : ""; - if (result5 !== null) { pos2 = pos; - if (input.charCodeAt(pos) === 58) { result6 = ":"; pos++; } else { result6 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result6 !== null) { result7 = parse_h16(); - if (result7 !== null) { result6 = [result6, result7]; } else { @@ -7460,21 +6360,17 @@ module.exports = function () { result6 = null; pos = pos2; } - result6 = result6 !== null ? result6 : ""; - if (result6 !== null) { if (input.substr(pos, 2) === "::") { result7 = "::"; pos += 2; } else { result7 = null; - if (reportFailures === 0) { matchFailed("\"::\""); } } - if (result7 !== null) { result0 = [result0, result1, result2, result3, result4, result5, result6, result7]; } else { @@ -7523,39 +6419,31 @@ module.exports = function () { } } } - if (result0 !== null) { result0 = function (offset) { data.host_type = 'IPv6'; return input.substring(pos, offset); }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_h16() { var result0, result1, result2, result3; var pos0; pos0 = pos; result0 = parse_HEXDIG(); - if (result0 !== null) { result1 = parse_HEXDIG(); result1 = result1 !== null ? result1 : ""; - if (result1 !== null) { result2 = parse_HEXDIG(); result2 = result2 !== null ? result2 : ""; - if (result2 !== null) { result3 = parse_HEXDIG(); result3 = result3 !== null ? result3 : ""; - if (result3 !== null) { result0 = [result0, result1, result2, result3]; } else { @@ -7574,31 +6462,25 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_ls32() { var result0, result1, result2; var pos0; pos0 = pos; result0 = parse_h16(); - if (result0 !== null) { if (input.charCodeAt(pos) === 58) { result1 = ":"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result1 !== null) { result2 = parse_h16(); - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -7613,66 +6495,53 @@ module.exports = function () { result0 = null; pos = pos0; } - if (result0 === null) { result0 = parse_IPv4address(); } - return result0; } - function parse_IPv4address() { var result0, result1, result2, result3, result4, result5, result6; var pos0, pos1; pos0 = pos; pos1 = pos; result0 = parse_dec_octet(); - if (result0 !== null) { if (input.charCodeAt(pos) === 46) { result1 = "."; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\".\""); } } - if (result1 !== null) { result2 = parse_dec_octet(); - if (result2 !== null) { if (input.charCodeAt(pos) === 46) { result3 = "."; pos++; } else { result3 = null; - if (reportFailures === 0) { matchFailed("\".\""); } } - if (result3 !== null) { result4 = parse_dec_octet(); - if (result4 !== null) { if (input.charCodeAt(pos) === 46) { result5 = "."; pos++; } else { result5 = null; - if (reportFailures === 0) { matchFailed("\".\""); } } - if (result5 !== null) { result6 = parse_dec_octet(); - if (result6 !== null) { result0 = [result0, result1, result2, result3, result4, result5, result6]; } else { @@ -7703,49 +6572,40 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset) { data.host_type = 'IPv4'; return input.substring(pos, offset); }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_dec_octet() { var result0, result1, result2; var pos0; pos0 = pos; - if (input.substr(pos, 2) === "25") { result0 = "25"; pos += 2; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"25\""); } } - if (result0 !== null) { if (/^[0-5]/.test(input.charAt(pos))) { result1 = input.charAt(pos); pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("[0-5]"); } } - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -7756,36 +6616,29 @@ module.exports = function () { result0 = null; pos = pos0; } - if (result0 === null) { pos0 = pos; - if (input.charCodeAt(pos) === 50) { result0 = "2"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"2\""); } } - if (result0 !== null) { if (/^[0-4]/.test(input.charAt(pos))) { result1 = input.charAt(pos); pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("[0-4]"); } } - if (result1 !== null) { result2 = parse_DIGIT(); - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -7800,27 +6653,21 @@ module.exports = function () { result0 = null; pos = pos0; } - if (result0 === null) { pos0 = pos; - if (input.charCodeAt(pos) === 49) { result0 = "1"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"1\""); } } - if (result0 !== null) { result1 = parse_DIGIT(); - if (result1 !== null) { result2 = parse_DIGIT(); - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -7835,24 +6682,19 @@ module.exports = function () { result0 = null; pos = pos0; } - if (result0 === null) { pos0 = pos; - if (/^[1-9]/.test(input.charAt(pos))) { result0 = input.charAt(pos); pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("[1-9]"); } } - if (result0 !== null) { result1 = parse_DIGIT(); - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -7863,17 +6705,14 @@ module.exports = function () { result0 = null; pos = pos0; } - if (result0 === null) { result0 = parse_DIGIT(); } } } } - return result0; } - function parse_port() { var result0, result1, result2, result3, result4; var pos0, pos1; @@ -7881,23 +6720,18 @@ module.exports = function () { pos1 = pos; result0 = parse_DIGIT(); result0 = result0 !== null ? result0 : ""; - if (result0 !== null) { result1 = parse_DIGIT(); result1 = result1 !== null ? result1 : ""; - if (result1 !== null) { result2 = parse_DIGIT(); result2 = result2 !== null ? result2 : ""; - if (result2 !== null) { result3 = parse_DIGIT(); result3 = result3 !== null ? result3 : ""; - if (result3 !== null) { result4 = parse_DIGIT(); result4 = result4 !== null ? result4 : ""; - if (result4 !== null) { result0 = [result0, result1, result2, result3, result4]; } else { @@ -7920,7 +6754,6 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset, port) { port = parseInt(port.join('')); @@ -7928,34 +6761,27 @@ module.exports = function () { return port; }(pos0, result0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_uri_parameters() { var result0, result1, result2; var pos0; result0 = []; pos0 = pos; - if (input.charCodeAt(pos) === 59) { result1 = ";"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\";\""); } } - if (result1 !== null) { result2 = parse_uri_parameter(); - if (result2 !== null) { result1 = [result1, result2]; } else { @@ -7966,25 +6792,20 @@ module.exports = function () { result1 = null; pos = pos0; } - while (result1 !== null) { result0.push(result1); pos0 = pos; - if (input.charCodeAt(pos) === 59) { result1 = ";"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\";\""); } } - if (result1 !== null) { result2 = parse_uri_parameter(); - if (result2 !== null) { result1 = [result1, result2]; } else { @@ -7996,29 +6817,21 @@ module.exports = function () { pos = pos0; } } - return result0; } - function parse_uri_parameter() { var result0; result0 = parse_transport_param(); - if (result0 === null) { result0 = parse_user_param(); - if (result0 === null) { result0 = parse_method_param(); - if (result0 === null) { result0 = parse_ttl_param(); - if (result0 === null) { result0 = parse_maddr_param(); - if (result0 === null) { result0 = parse_lr_param(); - if (result0 === null) { result0 = parse_other_param(); } @@ -8027,82 +6840,68 @@ module.exports = function () { } } } - return result0; } - function parse_transport_param() { var result0, result1; var pos0, pos1; pos0 = pos; pos1 = pos; - if (input.substr(pos, 10).toLowerCase() === "transport=") { result0 = input.substr(pos, 10); pos += 10; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"transport=\""); } } - if (result0 !== null) { if (input.substr(pos, 3).toLowerCase() === "udp") { result1 = input.substr(pos, 3); pos += 3; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"udp\""); } } - if (result1 === null) { if (input.substr(pos, 3).toLowerCase() === "tcp") { result1 = input.substr(pos, 3); pos += 3; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"tcp\""); } } - if (result1 === null) { if (input.substr(pos, 4).toLowerCase() === "sctp") { result1 = input.substr(pos, 4); pos += 4; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"sctp\""); } } - if (result1 === null) { if (input.substr(pos, 3).toLowerCase() === "tls") { result1 = input.substr(pos, 3); pos += 3; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"tls\""); } } - if (result1 === null) { result1 = parse_token(); } } } } - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -8113,67 +6912,55 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset, transport) { if (!data.uri_params) data.uri_params = {}; data.uri_params['transport'] = transport.toLowerCase(); }(pos0, result0[1]); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_user_param() { var result0, result1; var pos0, pos1; pos0 = pos; pos1 = pos; - if (input.substr(pos, 5).toLowerCase() === "user=") { result0 = input.substr(pos, 5); pos += 5; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"user=\""); } } - if (result0 !== null) { if (input.substr(pos, 5).toLowerCase() === "phone") { result1 = input.substr(pos, 5); pos += 5; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"phone\""); } } - if (result1 === null) { if (input.substr(pos, 2).toLowerCase() === "ip") { result1 = input.substr(pos, 2); pos += 2; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"ip\""); } } - if (result1 === null) { result1 = parse_token(); } } - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -8184,41 +6971,33 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset, user) { if (!data.uri_params) data.uri_params = {}; data.uri_params['user'] = user.toLowerCase(); }(pos0, result0[1]); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_method_param() { var result0, result1; var pos0, pos1; pos0 = pos; pos1 = pos; - if (input.substr(pos, 7).toLowerCase() === "method=") { result0 = input.substr(pos, 7); pos += 7; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"method=\""); } } - if (result0 !== null) { result1 = parse_Method(); - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -8229,41 +7008,33 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset, method) { if (!data.uri_params) data.uri_params = {}; data.uri_params['method'] = method; }(pos0, result0[1]); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_ttl_param() { var result0, result1; var pos0, pos1; pos0 = pos; pos1 = pos; - if (input.substr(pos, 4).toLowerCase() === "ttl=") { result0 = input.substr(pos, 4); pos += 4; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"ttl=\""); } } - if (result0 !== null) { result1 = parse_ttl(); - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -8274,41 +7045,33 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset, ttl) { if (!data.params) data.params = {}; data.params['ttl'] = ttl; }(pos0, result0[1]); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_maddr_param() { var result0, result1; var pos0, pos1; pos0 = pos; pos1 = pos; - if (input.substr(pos, 6).toLowerCase() === "maddr=") { result0 = input.substr(pos, 6); pos += 6; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"maddr=\""); } } - if (result0 !== null) { result1 = parse_host(); - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -8319,55 +7082,44 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset, maddr) { if (!data.uri_params) data.uri_params = {}; data.uri_params['maddr'] = maddr; }(pos0, result0[1]); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_lr_param() { var result0, result1, result2; var pos0, pos1, pos2; pos0 = pos; pos1 = pos; - if (input.substr(pos, 2).toLowerCase() === "lr") { result0 = input.substr(pos, 2); pos += 2; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"lr\""); } } - if (result0 !== null) { pos2 = pos; - if (input.charCodeAt(pos) === 61) { result1 = "="; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"=\""); } } - if (result1 !== null) { result2 = parse_token(); - if (result2 !== null) { result1 = [result1, result2]; } else { @@ -8378,9 +7130,7 @@ module.exports = function () { result1 = null; pos = pos2; } - result1 = result1 !== null ? result1 : ""; - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -8391,45 +7141,36 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset) { if (!data.uri_params) data.uri_params = {}; data.uri_params['lr'] = undefined; }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_other_param() { var result0, result1, result2; var pos0, pos1, pos2; pos0 = pos; pos1 = pos; result0 = parse_pname(); - if (result0 !== null) { pos2 = pos; - if (input.charCodeAt(pos) === 61) { result1 = "="; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"=\""); } } - if (result1 !== null) { result2 = parse_pvalue(); - if (result2 !== null) { result1 = [result1, result2]; } else { @@ -8440,9 +7181,7 @@ module.exports = function () { result1 = null; pos = pos2; } - result1 = result1 !== null ? result1 : ""; - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -8453,37 +7192,29 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset, param, value) { if (!data.uri_params) data.uri_params = {}; - if (typeof value === 'undefined') { value = undefined; } else { value = value[1]; } - data.uri_params[param.toLowerCase()] = value; }(pos0, result0[0], result0[1]); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_pname() { var result0, result1; var pos0; pos0 = pos; result1 = parse_paramchar(); - if (result1 !== null) { result0 = []; - while (result1 !== null) { result0.push(result1); result1 = parse_paramchar(); @@ -8491,29 +7222,23 @@ module.exports = function () { } else { result0 = null; } - if (result0 !== null) { result0 = function (offset, pname) { return pname.join(''); }(pos0, result0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_pvalue() { var result0, result1; var pos0; pos0 = pos; result1 = parse_paramchar(); - if (result1 !== null) { result0 = []; - while (result1 !== null) { result0.push(result1); result1 = parse_paramchar(); @@ -8521,116 +7246,94 @@ module.exports = function () { } else { result0 = null; } - if (result0 !== null) { result0 = function (offset, pvalue) { return pvalue.join(''); }(pos0, result0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_paramchar() { var result0; result0 = parse_param_unreserved(); - if (result0 === null) { result0 = parse_unreserved(); - if (result0 === null) { result0 = parse_escaped(); } } - return result0; } - function parse_param_unreserved() { var result0; - if (input.charCodeAt(pos) === 91) { result0 = "["; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"[\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 93) { result0 = "]"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"]\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 47) { result0 = "/"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"/\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 58) { result0 = ":"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 38) { result0 = "&"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"&\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 43) { result0 = "+"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"+\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 36) { result0 = "$"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"$\""); } @@ -8641,47 +7344,37 @@ module.exports = function () { } } } - return result0; } - function parse_headers() { var result0, result1, result2, result3, result4; var pos0, pos1; pos0 = pos; - if (input.charCodeAt(pos) === 63) { result0 = "?"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"?\""); } } - if (result0 !== null) { result1 = parse_header(); - if (result1 !== null) { result2 = []; pos1 = pos; - if (input.charCodeAt(pos) === 38) { result3 = "&"; pos++; } else { result3 = null; - if (reportFailures === 0) { matchFailed("\"&\""); } } - if (result3 !== null) { result4 = parse_header(); - if (result4 !== null) { result3 = [result3, result4]; } else { @@ -8692,25 +7385,20 @@ module.exports = function () { result3 = null; pos = pos1; } - while (result3 !== null) { result2.push(result3); pos1 = pos; - if (input.charCodeAt(pos) === 38) { result3 = "&"; pos++; } else { result3 = null; - if (reportFailures === 0) { matchFailed("\"&\""); } } - if (result3 !== null) { result4 = parse_header(); - if (result4 !== null) { result3 = [result3, result4]; } else { @@ -8722,7 +7410,6 @@ module.exports = function () { pos = pos1; } } - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -8737,32 +7424,26 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_header() { var result0, result1, result2; var pos0, pos1; pos0 = pos; pos1 = pos; result0 = parse_hname(); - if (result0 !== null) { if (input.charCodeAt(pos) === 61) { result1 = "="; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"=\""); } } - if (result1 !== null) { result2 = parse_hvalue(); - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -8777,13 +7458,11 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset, hname, hvalue) { hname = hname.join('').toLowerCase(); hvalue = hvalue.join(''); if (!data.uri_headers) data.uri_headers = {}; - if (!data.uri_headers[hname]) { data.uri_headers[hname] = [hvalue]; } else { @@ -8791,36 +7470,27 @@ module.exports = function () { } }(pos0, result0[0], result0[2]); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_hname() { var result0, result1; result1 = parse_hnv_unreserved(); - if (result1 === null) { result1 = parse_unreserved(); - if (result1 === null) { result1 = parse_escaped(); } } - if (result1 !== null) { result0 = []; - while (result1 !== null) { result0.push(result1); result1 = parse_hnv_unreserved(); - if (result1 === null) { result1 = parse_unreserved(); - if (result1 === null) { result1 = parse_escaped(); } @@ -8829,120 +7499,97 @@ module.exports = function () { } else { result0 = null; } - return result0; } - function parse_hvalue() { var result0, result1; result0 = []; result1 = parse_hnv_unreserved(); - if (result1 === null) { result1 = parse_unreserved(); - if (result1 === null) { result1 = parse_escaped(); } } - while (result1 !== null) { result0.push(result1); result1 = parse_hnv_unreserved(); - if (result1 === null) { result1 = parse_unreserved(); - if (result1 === null) { result1 = parse_escaped(); } } } - return result0; } - function parse_hnv_unreserved() { var result0; - if (input.charCodeAt(pos) === 91) { result0 = "["; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"[\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 93) { result0 = "]"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"]\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 47) { result0 = "/"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"/\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 63) { result0 = "?"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"?\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 58) { result0 = ":"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 43) { result0 = "+"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"+\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 36) { result0 = "$"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"$\""); } @@ -8953,39 +7600,29 @@ module.exports = function () { } } } - return result0; } - function parse_Request_Response() { var result0; result0 = parse_Status_Line(); - if (result0 === null) { result0 = parse_Request_Line(); } - return result0; } - function parse_Request_Line() { var result0, result1, result2, result3, result4; var pos0; pos0 = pos; result0 = parse_Method(); - if (result0 !== null) { result1 = parse_SP(); - if (result1 !== null) { result2 = parse_Request_URI(); - if (result2 !== null) { result3 = parse_SP(); - if (result3 !== null) { result4 = parse_SIP_Version(); - if (result4 !== null) { result0 = [result0, result1, result2, result3, result4]; } else { @@ -9008,46 +7645,36 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_Request_URI() { var result0; result0 = parse_SIP_URI(); - if (result0 === null) { result0 = parse_absoluteURI(); } - return result0; } - function parse_absoluteURI() { var result0, result1, result2; var pos0; pos0 = pos; result0 = parse_scheme(); - if (result0 !== null) { if (input.charCodeAt(pos) === 58) { result1 = ":"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result1 !== null) { result2 = parse_hier_part(); - if (result2 === null) { result2 = parse_opaque_part(); } - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -9062,37 +7689,29 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_hier_part() { var result0, result1, result2; var pos0, pos1; pos0 = pos; result0 = parse_net_path(); - if (result0 === null) { result0 = parse_abs_path(); } - if (result0 !== null) { pos1 = pos; - if (input.charCodeAt(pos) === 63) { result1 = "?"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"?\""); } } - if (result1 !== null) { result2 = parse_query(); - if (result2 !== null) { result1 = [result1, result2]; } else { @@ -9103,9 +7722,7 @@ module.exports = function () { result1 = null; pos = pos1; } - result1 = result1 !== null ? result1 : ""; - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -9116,33 +7733,26 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_net_path() { var result0, result1, result2; var pos0; pos0 = pos; - if (input.substr(pos, 2) === "//") { result0 = "//"; pos += 2; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"//\""); } } - if (result0 !== null) { result1 = parse_authority(); - if (result1 !== null) { result2 = parse_abs_path(); result2 = result2 !== null ? result2 : ""; - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -9157,29 +7767,23 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_abs_path() { var result0, result1; var pos0; pos0 = pos; - if (input.charCodeAt(pos) === 47) { result0 = "/"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"/\""); } } - if (result0 !== null) { result1 = parse_path_segments(); - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -9190,25 +7794,20 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_opaque_part() { var result0, result1, result2; var pos0; pos0 = pos; result0 = parse_uric_no_slash(); - if (result0 !== null) { result1 = []; result2 = parse_uric(); - while (result2 !== null) { result1.push(result2); result2 = parse_uric(); } - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -9219,135 +7818,110 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_uric() { var result0; result0 = parse_reserved(); - if (result0 === null) { result0 = parse_unreserved(); - if (result0 === null) { result0 = parse_escaped(); } } - return result0; } - function parse_uric_no_slash() { var result0; result0 = parse_unreserved(); - if (result0 === null) { result0 = parse_escaped(); - if (result0 === null) { if (input.charCodeAt(pos) === 59) { result0 = ";"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\";\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 63) { result0 = "?"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"?\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 58) { result0 = ":"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 64) { result0 = "@"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"@\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 38) { result0 = "&"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"&\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 61) { result0 = "="; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"=\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 43) { result0 = "+"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"+\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 36) { result0 = "$"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"$\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 44) { result0 = ","; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\",\""); } @@ -9362,34 +7936,27 @@ module.exports = function () { } } } - return result0; } - function parse_path_segments() { var result0, result1, result2, result3; var pos0, pos1; pos0 = pos; result0 = parse_segment(); - if (result0 !== null) { result1 = []; pos1 = pos; - if (input.charCodeAt(pos) === 47) { result2 = "/"; pos++; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\"/\""); } } - if (result2 !== null) { result3 = parse_segment(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -9400,25 +7967,20 @@ module.exports = function () { result2 = null; pos = pos1; } - while (result2 !== null) { result1.push(result2); pos1 = pos; - if (input.charCodeAt(pos) === 47) { result2 = "/"; pos++; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\"/\""); } } - if (result2 !== null) { result3 = parse_segment(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -9430,7 +7992,6 @@ module.exports = function () { pos = pos1; } } - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -9441,40 +8002,32 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_segment() { var result0, result1, result2, result3; var pos0, pos1; pos0 = pos; result0 = []; result1 = parse_pchar(); - while (result1 !== null) { result0.push(result1); result1 = parse_pchar(); } - if (result0 !== null) { result1 = []; pos1 = pos; - if (input.charCodeAt(pos) === 59) { result2 = ";"; pos++; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\";\""); } } - if (result2 !== null) { result3 = parse_param(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -9485,25 +8038,20 @@ module.exports = function () { result2 = null; pos = pos1; } - while (result2 !== null) { result1.push(result2); pos1 = pos; - if (input.charCodeAt(pos) === 59) { result2 = ";"; pos++; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\";\""); } } - if (result2 !== null) { result3 = parse_param(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -9515,7 +8063,6 @@ module.exports = function () { pos = pos1; } } - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -9526,109 +8073,89 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_param() { var result0, result1; result0 = []; result1 = parse_pchar(); - while (result1 !== null) { result0.push(result1); result1 = parse_pchar(); } - return result0; } - function parse_pchar() { var result0; result0 = parse_unreserved(); - if (result0 === null) { result0 = parse_escaped(); - if (result0 === null) { if (input.charCodeAt(pos) === 58) { result0 = ":"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 64) { result0 = "@"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"@\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 38) { result0 = "&"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"&\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 61) { result0 = "="; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"=\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 43) { result0 = "+"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"+\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 36) { result0 = "$"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"$\""); } } - if (result0 === null) { if (input.charCodeAt(pos) === 44) { result0 = ","; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\",\""); } @@ -9641,55 +8168,45 @@ module.exports = function () { } } } - return result0; } - function parse_scheme() { var result0, result1, result2; var pos0, pos1; pos0 = pos; pos1 = pos; result0 = parse_ALPHA(); - if (result0 !== null) { result1 = []; result2 = parse_ALPHA(); - if (result2 === null) { result2 = parse_DIGIT(); - if (result2 === null) { if (input.charCodeAt(pos) === 43) { result2 = "+"; pos++; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\"+\""); } } - if (result2 === null) { if (input.charCodeAt(pos) === 45) { result2 = "-"; pos++; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\"-\""); } } - if (result2 === null) { if (input.charCodeAt(pos) === 46) { result2 = "."; pos++; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\".\""); } @@ -9698,45 +8215,37 @@ module.exports = function () { } } } - while (result2 !== null) { result1.push(result2); result2 = parse_ALPHA(); - if (result2 === null) { result2 = parse_DIGIT(); - if (result2 === null) { if (input.charCodeAt(pos) === 43) { result2 = "+"; pos++; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\"+\""); } } - if (result2 === null) { if (input.charCodeAt(pos) === 45) { result2 = "-"; pos++; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\"-\""); } } - if (result2 === null) { if (input.charCodeAt(pos) === 46) { result2 = "."; pos++; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\".\""); } @@ -9746,7 +8255,6 @@ module.exports = function () { } } } - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -9757,50 +8265,40 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset) { data.scheme = input.substring(pos, offset); }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_authority() { var result0; result0 = parse_srvr(); - if (result0 === null) { result0 = parse_reg_name(); } - return result0; } - function parse_srvr() { var result0, result1; var pos0, pos1; pos0 = pos; pos1 = pos; result0 = parse_userinfo(); - if (result0 !== null) { if (input.charCodeAt(pos) === 64) { result1 = "@"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"@\""); } } - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -9811,12 +8309,9 @@ module.exports = function () { result0 = null; pos = pos1; } - result0 = result0 !== null ? result0 : ""; - if (result0 !== null) { result1 = parse_hostport(); - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -9827,109 +8322,90 @@ module.exports = function () { result0 = null; pos = pos0; } - result0 = result0 !== null ? result0 : ""; return result0; } - function parse_reg_name() { var result0, result1; result1 = parse_unreserved(); - if (result1 === null) { result1 = parse_escaped(); - if (result1 === null) { if (input.charCodeAt(pos) === 36) { result1 = "$"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"$\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 44) { result1 = ","; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\",\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 59) { result1 = ";"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\";\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 58) { result1 = ":"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 64) { result1 = "@"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"@\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 38) { result1 = "&"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"&\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 61) { result1 = "="; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"=\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 43) { result1 = "+"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"+\""); } @@ -9943,108 +8419,89 @@ module.exports = function () { } } } - if (result1 !== null) { result0 = []; - while (result1 !== null) { result0.push(result1); result1 = parse_unreserved(); - if (result1 === null) { result1 = parse_escaped(); - if (result1 === null) { if (input.charCodeAt(pos) === 36) { result1 = "$"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"$\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 44) { result1 = ","; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\",\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 59) { result1 = ";"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\";\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 58) { result1 = ":"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\":\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 64) { result1 = "@"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"@\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 38) { result1 = "&"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"&\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 61) { result1 = "="; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"=\""); } } - if (result1 === null) { if (input.charCodeAt(pos) === 43) { result1 = "+"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"+\""); } @@ -10062,58 +8519,46 @@ module.exports = function () { } else { result0 = null; } - return result0; } - function parse_query() { var result0, result1; result0 = []; result1 = parse_uric(); - while (result1 !== null) { result0.push(result1); result1 = parse_uric(); } - return result0; } - function parse_SIP_Version() { var result0, result1, result2, result3, result4, result5; var pos0, pos1; pos0 = pos; pos1 = pos; - if (input.substr(pos, 3).toLowerCase() === "sip") { result0 = input.substr(pos, 3); pos += 3; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"SIP\""); } } - if (result0 !== null) { if (input.charCodeAt(pos) === 47) { result1 = "/"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"/\""); } } - if (result1 !== null) { result3 = parse_DIGIT(); - if (result3 !== null) { result2 = []; - while (result3 !== null) { result2.push(result3); result3 = parse_DIGIT(); @@ -10121,25 +8566,20 @@ module.exports = function () { } else { result2 = null; } - if (result2 !== null) { if (input.charCodeAt(pos) === 46) { result3 = "."; pos++; } else { result3 = null; - if (reportFailures === 0) { matchFailed("\".\""); } } - if (result3 !== null) { result5 = parse_DIGIT(); - if (result5 !== null) { result4 = []; - while (result5 !== null) { result4.push(result5); result5 = parse_DIGIT(); @@ -10147,7 +8587,6 @@ module.exports = function () { } else { result4 = null; } - if (result4 !== null) { result0 = [result0, result1, result2, result3, result4]; } else { @@ -10170,203 +8609,154 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset) { data.sip_version = input.substring(pos, offset); }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_INVITEm() { var result0; - if (input.substr(pos, 6) === "INVITE") { result0 = "INVITE"; pos += 6; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"INVITE\""); } } - return result0; } - function parse_ACKm() { var result0; - if (input.substr(pos, 3) === "ACK") { result0 = "ACK"; pos += 3; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"ACK\""); } } - return result0; } - function parse_OPTIONSm() { var result0; - if (input.substr(pos, 7) === "OPTIONS") { result0 = "OPTIONS"; pos += 7; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"OPTIONS\""); } } - return result0; } - function parse_BYEm() { var result0; - if (input.substr(pos, 3) === "BYE") { result0 = "BYE"; pos += 3; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"BYE\""); } } - return result0; } - function parse_CANCELm() { var result0; - if (input.substr(pos, 6) === "CANCEL") { result0 = "CANCEL"; pos += 6; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"CANCEL\""); } } - return result0; } - function parse_REGISTERm() { var result0; - if (input.substr(pos, 8) === "REGISTER") { result0 = "REGISTER"; pos += 8; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"REGISTER\""); } } - return result0; } - function parse_SUBSCRIBEm() { var result0; - if (input.substr(pos, 9) === "SUBSCRIBE") { result0 = "SUBSCRIBE"; pos += 9; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"SUBSCRIBE\""); } } - return result0; } - function parse_NOTIFYm() { var result0; - if (input.substr(pos, 6) === "NOTIFY") { result0 = "NOTIFY"; pos += 6; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"NOTIFY\""); } } - return result0; } - function parse_REFERm() { var result0; - if (input.substr(pos, 5) === "REFER") { result0 = "REFER"; pos += 5; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"REFER\""); } } - return result0; } - function parse_Method() { var result0; var pos0; pos0 = pos; result0 = parse_INVITEm(); - if (result0 === null) { result0 = parse_ACKm(); - if (result0 === null) { result0 = parse_OPTIONSm(); - if (result0 === null) { result0 = parse_BYEm(); - if (result0 === null) { result0 = parse_CANCELm(); - if (result0 === null) { result0 = parse_REGISTERm(); - if (result0 === null) { result0 = parse_SUBSCRIBEm(); - if (result0 === null) { result0 = parse_NOTIFYm(); - if (result0 === null) { result0 = parse_REFERm(); - if (result0 === null) { result0 = parse_token(); } @@ -10378,39 +8768,30 @@ module.exports = function () { } } } - if (result0 !== null) { result0 = function (offset) { data.method = input.substring(pos, offset); return data.method; }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_Status_Line() { var result0, result1, result2, result3, result4; var pos0; pos0 = pos; result0 = parse_SIP_Version(); - if (result0 !== null) { result1 = parse_SP(); - if (result1 !== null) { result2 = parse_Status_Code(); - if (result2 !== null) { result3 = parse_SP(); - if (result3 !== null) { result4 = parse_Reason_Phrase(); - if (result4 !== null) { result0 = [result0, result1, result2, result3, result4]; } else { @@ -10433,41 +8814,32 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_Status_Code() { var result0; var pos0; pos0 = pos; result0 = parse_extension_code(); - if (result0 !== null) { result0 = function (offset, status_code) { data.status_code = parseInt(status_code.join('')); }(pos0, result0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_extension_code() { var result0, result1, result2; var pos0; pos0 = pos; result0 = parse_DIGIT(); - if (result0 !== null) { result1 = parse_DIGIT(); - if (result1 !== null) { result2 = parse_DIGIT(); - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -10482,32 +8854,24 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_Reason_Phrase() { var result0, result1; var pos0; pos0 = pos; result0 = []; result1 = parse_reserved(); - if (result1 === null) { result1 = parse_unreserved(); - if (result1 === null) { result1 = parse_escaped(); - if (result1 === null) { result1 = parse_UTF8_NONASCII(); - if (result1 === null) { result1 = parse_UTF8_CONT(); - if (result1 === null) { result1 = parse_SP(); - if (result1 === null) { result1 = parse_HTAB(); } @@ -10516,26 +8880,19 @@ module.exports = function () { } } } - while (result1 !== null) { result0.push(result1); result1 = parse_reserved(); - if (result1 === null) { result1 = parse_unreserved(); - if (result1 === null) { result1 = parse_escaped(); - if (result1 === null) { result1 = parse_UTF8_NONASCII(); - if (result1 === null) { result1 = parse_UTF8_CONT(); - if (result1 === null) { result1 = parse_SP(); - if (result1 === null) { result1 = parse_HTAB(); } @@ -10545,34 +8902,27 @@ module.exports = function () { } } } - if (result0 !== null) { result0 = function (offset) { data.reason_phrase = input.substring(pos, offset); }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_Allow_Events() { var result0, result1, result2, result3; var pos0, pos1; pos0 = pos; result0 = parse_event_type(); - if (result0 !== null) { result1 = []; pos1 = pos; result2 = parse_COMMA(); - if (result2 !== null) { result3 = parse_event_type(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -10583,15 +8933,12 @@ module.exports = function () { result2 = null; pos = pos1; } - while (result2 !== null) { result1.push(result2); pos1 = pos; result2 = parse_COMMA(); - if (result2 !== null) { result3 = parse_event_type(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -10603,7 +8950,6 @@ module.exports = function () { pos = pos1; } } - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -10614,34 +8960,27 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_Call_ID() { var result0, result1, result2; var pos0, pos1, pos2; pos0 = pos; pos1 = pos; result0 = parse_word(); - if (result0 !== null) { pos2 = pos; - if (input.charCodeAt(pos) === 64) { result1 = "@"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"@\""); } } - if (result1 !== null) { result2 = parse_word(); - if (result2 !== null) { result1 = [result1, result2]; } else { @@ -10652,9 +8991,7 @@ module.exports = function () { result1 = null; pos = pos2; } - result1 = result1 !== null ? result1 : ""; - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -10665,38 +9002,30 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset) { data = input.substring(pos, offset); }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_Contact() { var result0, result1, result2, result3; var pos0, pos1, pos2; pos0 = pos; result0 = parse_STAR(); - if (result0 === null) { pos1 = pos; result0 = parse_contact_param(); - if (result0 !== null) { result1 = []; pos2 = pos; result2 = parse_COMMA(); - if (result2 !== null) { result3 = parse_contact_param(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -10707,15 +9036,12 @@ module.exports = function () { result2 = null; pos = pos2; } - while (result2 !== null) { result1.push(result2); pos2 = pos; result2 = parse_COMMA(); - if (result2 !== null) { result3 = parse_contact_param(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -10727,7 +9053,6 @@ module.exports = function () { pos = pos2; } } - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -10739,19 +9064,16 @@ module.exports = function () { pos = pos1; } } - if (result0 !== null) { result0 = function (offset) { var idx, length; length = data.multi_header.length; - for (idx = 0; idx < length; idx++) { if (data.multi_header[idx].parsed === null) { data = null; break; } } - if (data !== null) { data = data.multi_header; } else { @@ -10759,33 +9081,26 @@ module.exports = function () { } }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_contact_param() { var result0, result1, result2, result3; var pos0, pos1, pos2; pos0 = pos; pos1 = pos; result0 = parse_SIP_URI_noparams(); - if (result0 === null) { result0 = parse_name_addr(); } - if (result0 !== null) { result1 = []; pos2 = pos; result2 = parse_SEMI(); - if (result2 !== null) { result3 = parse_contact_params(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -10796,15 +9111,12 @@ module.exports = function () { result2 = null; pos = pos2; } - while (result2 !== null) { result1.push(result2); pos2 = pos; result2 = parse_SEMI(); - if (result2 !== null) { result3 = parse_contact_params(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -10816,7 +9128,6 @@ module.exports = function () { pos = pos2; } } - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -10827,12 +9138,10 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset) { var header; if (!data.multi_header) data.multi_header = []; - try { header = new NameAddrHeader(data.uri, data.display_name, data.params); delete data.uri; @@ -10841,7 +9150,6 @@ module.exports = function () { } catch (e) { header = null; } - data.multi_header.push({ 'possition': pos, 'offset': offset, @@ -10849,30 +9157,23 @@ module.exports = function () { }); }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_name_addr() { var result0, result1, result2, result3; var pos0; pos0 = pos; result0 = parse_display_name(); result0 = result0 !== null ? result0 : ""; - if (result0 !== null) { result1 = parse_LAQUOT(); - if (result1 !== null) { result2 = parse_SIP_URI(); - if (result2 !== null) { result3 = parse_RAQUOT(); - if (result3 !== null) { result0 = [result0, result1, result2, result3]; } else { @@ -10891,25 +9192,20 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_display_name() { var result0, result1, result2, result3; var pos0, pos1, pos2; pos0 = pos; pos1 = pos; result0 = parse_token(); - if (result0 !== null) { result1 = []; pos2 = pos; result2 = parse_LWS(); - if (result2 !== null) { result3 = parse_token(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -10920,15 +9216,12 @@ module.exports = function () { result2 = null; pos = pos2; } - while (result2 !== null) { result1.push(result2); pos2 = pos; result2 = parse_LWS(); - if (result2 !== null) { result3 = parse_token(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -10940,7 +9233,6 @@ module.exports = function () { pos = pos2; } } - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -10951,11 +9243,9 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 === null) { result0 = parse_quoted_string_clean(); } - if (result0 !== null) { result0 = function (offset, display_name) { if (typeof display_name === 'string') { @@ -10969,52 +9259,40 @@ module.exports = function () { } }(pos0, result0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_contact_params() { var result0; result0 = parse_c_p_q(); - if (result0 === null) { result0 = parse_c_p_expires(); - if (result0 === null) { result0 = parse_generic_param(); } } - return result0; } - function parse_c_p_q() { var result0, result1, result2; var pos0, pos1; pos0 = pos; pos1 = pos; - if (input.substr(pos, 1).toLowerCase() === "q") { result0 = input.substr(pos, 1); pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"q\""); } } - if (result0 !== null) { result1 = parse_EQUAL(); - if (result1 !== null) { result2 = parse_qvalue(); - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -11029,44 +9307,35 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset, q) { if (!data.params) data.params = {}; data.params['q'] = q; }(pos0, result0[2]); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_c_p_expires() { var result0, result1, result2; var pos0, pos1; pos0 = pos; pos1 = pos; - if (input.substr(pos, 7).toLowerCase() === "expires") { result0 = input.substr(pos, 7); pos += 7; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"expires\""); } } - if (result0 !== null) { result1 = parse_EQUAL(); - if (result1 !== null) { result2 = parse_delta_seconds(); - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -11081,30 +9350,24 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset, expires) { if (!data.params) data.params = {}; data.params['expires'] = expires; }(pos0, result0[2]); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_delta_seconds() { var result0, result1; var pos0; pos0 = pos; result1 = parse_DIGIT(); - if (result1 !== null) { result0 = []; - while (result1 !== null) { result0.push(result1); result1 = parse_DIGIT(); @@ -11112,63 +9375,50 @@ module.exports = function () { } else { result0 = null; } - if (result0 !== null) { result0 = function (offset, delta_seconds) { return parseInt(delta_seconds.join('')); }(pos0, result0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_qvalue() { var result0, result1, result2, result3, result4; var pos0, pos1, pos2; pos0 = pos; pos1 = pos; - if (input.charCodeAt(pos) === 48) { result0 = "0"; pos++; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"0\""); } } - if (result0 !== null) { pos2 = pos; - if (input.charCodeAt(pos) === 46) { result1 = "."; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\".\""); } } - if (result1 !== null) { result2 = parse_DIGIT(); result2 = result2 !== null ? result2 : ""; - if (result2 !== null) { result3 = parse_DIGIT(); result3 = result3 !== null ? result3 : ""; - if (result3 !== null) { result4 = parse_DIGIT(); result4 = result4 !== null ? result4 : ""; - if (result4 !== null) { result1 = [result1, result2, result3, result4]; } else { @@ -11187,9 +9437,7 @@ module.exports = function () { result1 = null; pos = pos2; } - result1 = result1 !== null ? result1 : ""; - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -11200,34 +9448,27 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset) { return parseFloat(input.substring(pos, offset)); }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_generic_param() { var result0, result1, result2; var pos0, pos1, pos2; pos0 = pos; pos1 = pos; result0 = parse_token(); - if (result0 !== null) { pos2 = pos; result1 = parse_EQUAL(); - if (result1 !== null) { result2 = parse_gen_value(); - if (result2 !== null) { result1 = [result1, result2]; } else { @@ -11238,9 +9479,7 @@ module.exports = function () { result1 = null; pos = pos2; } - result1 = result1 !== null ? result1 : ""; - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -11251,57 +9490,44 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset, param, value) { if (!data.params) data.params = {}; - if (typeof value === 'undefined') { value = undefined; } else { value = value[1]; } - data.params[param.toLowerCase()] = value; }(pos0, result0[0], result0[1]); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_gen_value() { var result0; result0 = parse_token(); - if (result0 === null) { result0 = parse_host(); - if (result0 === null) { result0 = parse_quoted_string(); } } - return result0; } - function parse_Content_Disposition() { var result0, result1, result2, result3; var pos0, pos1; pos0 = pos; result0 = parse_disp_type(); - if (result0 !== null) { result1 = []; pos1 = pos; result2 = parse_SEMI(); - if (result2 !== null) { result3 = parse_disp_param(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -11312,15 +9538,12 @@ module.exports = function () { result2 = null; pos = pos1; } - while (result2 !== null) { result1.push(result2); pos1 = pos; result2 = parse_SEMI(); - if (result2 !== null) { result3 = parse_disp_param(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -11332,7 +9555,6 @@ module.exports = function () { pos = pos1; } } - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -11343,129 +9565,104 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_disp_type() { var result0; - if (input.substr(pos, 6).toLowerCase() === "render") { result0 = input.substr(pos, 6); pos += 6; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"render\""); } } - if (result0 === null) { if (input.substr(pos, 7).toLowerCase() === "session") { result0 = input.substr(pos, 7); pos += 7; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"session\""); } } - if (result0 === null) { if (input.substr(pos, 4).toLowerCase() === "icon") { result0 = input.substr(pos, 4); pos += 4; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"icon\""); } } - if (result0 === null) { if (input.substr(pos, 5).toLowerCase() === "alert") { result0 = input.substr(pos, 5); pos += 5; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"alert\""); } } - if (result0 === null) { result0 = parse_token(); } } } } - return result0; } - function parse_disp_param() { var result0; result0 = parse_handling_param(); - if (result0 === null) { result0 = parse_generic_param(); } - return result0; } - function parse_handling_param() { var result0, result1, result2; var pos0; pos0 = pos; - if (input.substr(pos, 8).toLowerCase() === "handling") { result0 = input.substr(pos, 8); pos += 8; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"handling\""); } } - if (result0 !== null) { result1 = parse_EQUAL(); - if (result1 !== null) { if (input.substr(pos, 8).toLowerCase() === "optional") { result2 = input.substr(pos, 8); pos += 8; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\"optional\""); } } - if (result2 === null) { if (input.substr(pos, 8).toLowerCase() === "required") { result2 = input.substr(pos, 8); pos += 8; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\"required\""); } } - if (result2 === null) { result2 = parse_token(); } } - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -11480,24 +9677,19 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_Content_Encoding() { var result0, result1, result2, result3; var pos0, pos1; pos0 = pos; result0 = parse_token(); - if (result0 !== null) { result1 = []; pos1 = pos; result2 = parse_COMMA(); - if (result2 !== null) { result3 = parse_token(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -11508,15 +9700,12 @@ module.exports = function () { result2 = null; pos = pos1; } - while (result2 !== null) { result1.push(result2); pos1 = pos; result2 = parse_COMMA(); - if (result2 !== null) { result3 = parse_token(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -11528,7 +9717,6 @@ module.exports = function () { pos = pos1; } } - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -11539,19 +9727,15 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_Content_Length() { var result0, result1; var pos0; pos0 = pos; result1 = parse_DIGIT(); - if (result1 !== null) { result0 = []; - while (result1 !== null) { result0.push(result1); result1 = parse_DIGIT(); @@ -11559,59 +9743,46 @@ module.exports = function () { } else { result0 = null; } - if (result0 !== null) { result0 = function (offset, length) { data = parseInt(length.join('')); }(pos0, result0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_Content_Type() { var result0; var pos0; pos0 = pos; result0 = parse_media_type(); - if (result0 !== null) { result0 = function (offset) { data = input.substring(pos, offset); }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_media_type() { var result0, result1, result2, result3, result4, result5; var pos0, pos1; pos0 = pos; result0 = parse_m_type(); - if (result0 !== null) { result1 = parse_SLASH(); - if (result1 !== null) { result2 = parse_m_subtype(); - if (result2 !== null) { result3 = []; pos1 = pos; result4 = parse_SEMI(); - if (result4 !== null) { result5 = parse_m_parameter(); - if (result5 !== null) { result4 = [result4, result5]; } else { @@ -11622,15 +9793,12 @@ module.exports = function () { result4 = null; pos = pos1; } - while (result4 !== null) { result3.push(result4); pos1 = pos; result4 = parse_SEMI(); - if (result4 !== null) { result5 = parse_m_parameter(); - if (result5 !== null) { result4 = [result4, result5]; } else { @@ -11642,7 +9810,6 @@ module.exports = function () { pos = pos1; } } - if (result3 !== null) { result0 = [result0, result1, result2, result3]; } else { @@ -11661,83 +9828,67 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_m_type() { var result0; result0 = parse_discrete_type(); - if (result0 === null) { result0 = parse_composite_type(); } - return result0; } - function parse_discrete_type() { var result0; - if (input.substr(pos, 4).toLowerCase() === "text") { result0 = input.substr(pos, 4); pos += 4; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"text\""); } } - if (result0 === null) { if (input.substr(pos, 5).toLowerCase() === "image") { result0 = input.substr(pos, 5); pos += 5; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"image\""); } } - if (result0 === null) { if (input.substr(pos, 5).toLowerCase() === "audio") { result0 = input.substr(pos, 5); pos += 5; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"audio\""); } } - if (result0 === null) { if (input.substr(pos, 5).toLowerCase() === "video") { result0 = input.substr(pos, 5); pos += 5; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"video\""); } } - if (result0 === null) { if (input.substr(pos, 11).toLowerCase() === "application") { result0 = input.substr(pos, 11); pos += 11; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"application\""); } } - if (result0 === null) { result0 = parse_extension_token(); } @@ -11745,74 +9896,58 @@ module.exports = function () { } } } - return result0; } - function parse_composite_type() { var result0; - if (input.substr(pos, 7).toLowerCase() === "message") { result0 = input.substr(pos, 7); pos += 7; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"message\""); } } - if (result0 === null) { if (input.substr(pos, 9).toLowerCase() === "multipart") { result0 = input.substr(pos, 9); pos += 9; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"multipart\""); } } - if (result0 === null) { result0 = parse_extension_token(); } } - return result0; } - function parse_extension_token() { var result0; result0 = parse_token(); - if (result0 === null) { result0 = parse_x_token(); } - return result0; } - function parse_x_token() { var result0, result1; var pos0; pos0 = pos; - if (input.substr(pos, 2).toLowerCase() === "x-") { result0 = input.substr(pos, 2); pos += 2; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"x-\""); } } - if (result0 !== null) { result1 = parse_token(); - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -11823,33 +9958,25 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_m_subtype() { var result0; result0 = parse_extension_token(); - if (result0 === null) { result0 = parse_token(); } - return result0; } - function parse_m_parameter() { var result0, result1, result2; var pos0; pos0 = pos; result0 = parse_token(); - if (result0 !== null) { result1 = parse_EQUAL(); - if (result1 !== null) { result2 = parse_m_value(); - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -11864,33 +9991,25 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_m_value() { var result0; result0 = parse_token(); - if (result0 === null) { result0 = parse_quoted_string(); } - return result0; } - function parse_CSeq() { var result0, result1, result2; var pos0; pos0 = pos; result0 = parse_CSeq_value(); - if (result0 !== null) { result1 = parse_LWS(); - if (result1 !== null) { result2 = parse_Method(); - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -11905,19 +10024,15 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_CSeq_value() { var result0, result1; var pos0; pos0 = pos; result1 = parse_DIGIT(); - if (result1 !== null) { result0 = []; - while (result1 !== null) { result0.push(result1); result1 = parse_DIGIT(); @@ -11925,54 +10040,43 @@ module.exports = function () { } else { result0 = null; } - if (result0 !== null) { result0 = function (offset, cseq_value) { data.value = parseInt(cseq_value.join('')); }(pos0, result0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_Expires() { var result0; var pos0; pos0 = pos; result0 = parse_delta_seconds(); - if (result0 !== null) { result0 = function (offset, expires) { data = expires; }(pos0, result0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_Event() { var result0, result1, result2, result3; var pos0, pos1, pos2; pos0 = pos; pos1 = pos; result0 = parse_event_type(); - if (result0 !== null) { result1 = []; pos2 = pos; result2 = parse_SEMI(); - if (result2 !== null) { result3 = parse_generic_param(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -11983,15 +10087,12 @@ module.exports = function () { result2 = null; pos = pos2; } - while (result2 !== null) { result1.push(result2); pos2 = pos; result2 = parse_SEMI(); - if (result2 !== null) { result3 = parse_generic_param(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -12003,7 +10104,6 @@ module.exports = function () { pos = pos2; } } - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -12014,44 +10114,35 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset, event_type) { data.event = event_type.join('').toLowerCase(); }(pos0, result0[0]); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_event_type() { var result0, result1, result2, result3; var pos0, pos1; pos0 = pos; result0 = parse_token_nodot(); - if (result0 !== null) { result1 = []; pos1 = pos; - if (input.charCodeAt(pos) === 46) { result2 = "."; pos++; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\".\""); } } - if (result2 !== null) { result3 = parse_token_nodot(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -12062,25 +10153,20 @@ module.exports = function () { result2 = null; pos = pos1; } - while (result2 !== null) { result1.push(result2); pos1 = pos; - if (input.charCodeAt(pos) === 46) { result2 = "."; pos++; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\".\""); } } - if (result2 !== null) { result3 = parse_token_nodot(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -12092,7 +10178,6 @@ module.exports = function () { pos = pos1; } } - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -12103,29 +10188,23 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_From() { var result0, result1, result2, result3; var pos0, pos1, pos2; pos0 = pos; pos1 = pos; result0 = parse_SIP_URI_noparams(); - if (result0 === null) { result0 = parse_name_addr(); } - if (result0 !== null) { result1 = []; pos2 = pos; result2 = parse_SEMI(); - if (result2 !== null) { result3 = parse_from_param(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -12136,15 +10215,12 @@ module.exports = function () { result2 = null; pos = pos2; } - while (result2 !== null) { result1.push(result2); pos2 = pos; result2 = parse_SEMI(); - if (result2 !== null) { result3 = parse_from_param(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -12156,7 +10232,6 @@ module.exports = function () { pos = pos2; } } - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -12167,14 +10242,11 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset) { var tag = data.tag; - try { data = new NameAddrHeader(data.uri, data.display_name, data.params); - if (tag) { data.setParam('tag', tag); } @@ -12183,48 +10255,37 @@ module.exports = function () { } }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_from_param() { var result0; result0 = parse_tag_param(); - if (result0 === null) { result0 = parse_generic_param(); } - return result0; } - function parse_tag_param() { var result0, result1, result2; var pos0, pos1; pos0 = pos; pos1 = pos; - if (input.substr(pos, 3).toLowerCase() === "tag") { result0 = input.substr(pos, 3); pos += 3; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"tag\""); } } - if (result0 !== null) { result1 = parse_EQUAL(); - if (result1 !== null) { result2 = parse_token(); - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -12239,29 +10300,23 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset, tag) { data.tag = tag; }(pos0, result0[2]); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_Max_Forwards() { var result0, result1; var pos0; pos0 = pos; result1 = parse_DIGIT(); - if (result1 !== null) { result0 = []; - while (result1 !== null) { result0.push(result1); result1 = parse_DIGIT(); @@ -12269,39 +10324,31 @@ module.exports = function () { } else { result0 = null; } - if (result0 !== null) { result0 = function (offset, forwards) { data = parseInt(forwards.join('')); }(pos0, result0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_Min_Expires() { var result0; var pos0; pos0 = pos; result0 = parse_delta_seconds(); - if (result0 !== null) { result0 = function (offset, min_expires) { data = min_expires; }(pos0, result0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_Name_Addr_Header() { var result0, result1, result2, result3, result4, result5, result6; var pos0, pos1, pos2; @@ -12309,29 +10356,22 @@ module.exports = function () { pos1 = pos; result0 = []; result1 = parse_display_name(); - while (result1 !== null) { result0.push(result1); result1 = parse_display_name(); } - if (result0 !== null) { result1 = parse_LAQUOT(); - if (result1 !== null) { result2 = parse_SIP_URI(); - if (result2 !== null) { result3 = parse_RAQUOT(); - if (result3 !== null) { result4 = []; pos2 = pos; result5 = parse_SEMI(); - if (result5 !== null) { result6 = parse_generic_param(); - if (result6 !== null) { result5 = [result5, result6]; } else { @@ -12342,15 +10382,12 @@ module.exports = function () { result5 = null; pos = pos2; } - while (result5 !== null) { result4.push(result5); pos2 = pos; result5 = parse_SEMI(); - if (result5 !== null) { result6 = parse_generic_param(); - if (result6 !== null) { result5 = [result5, result6]; } else { @@ -12362,7 +10399,6 @@ module.exports = function () { pos = pos2; } } - if (result4 !== null) { result0 = [result0, result1, result2, result3, result4]; } else { @@ -12385,7 +10421,6 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset) { try { @@ -12395,50 +10430,39 @@ module.exports = function () { } }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_Proxy_Authenticate() { var result0; result0 = parse_challenge(); return result0; } - function parse_challenge() { var result0, result1, result2, result3, result4, result5; var pos0, pos1; pos0 = pos; - if (input.substr(pos, 6).toLowerCase() === "digest") { result0 = input.substr(pos, 6); pos += 6; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"Digest\""); } } - if (result0 !== null) { result1 = parse_LWS(); - if (result1 !== null) { result2 = parse_digest_cln(); - if (result2 !== null) { result3 = []; pos1 = pos; result4 = parse_COMMA(); - if (result4 !== null) { result5 = parse_digest_cln(); - if (result5 !== null) { result4 = [result4, result5]; } else { @@ -12449,15 +10473,12 @@ module.exports = function () { result4 = null; pos = pos1; } - while (result4 !== null) { result3.push(result4); pos1 = pos; result4 = parse_COMMA(); - if (result4 !== null) { result5 = parse_digest_cln(); - if (result5 !== null) { result4 = [result4, result5]; } else { @@ -12469,7 +10490,6 @@ module.exports = function () { pos = pos1; } } - if (result3 !== null) { result0 = [result0, result1, result2, result3]; } else { @@ -12488,34 +10508,26 @@ module.exports = function () { result0 = null; pos = pos0; } - if (result0 === null) { result0 = parse_other_challenge(); } - return result0; } - function parse_other_challenge() { var result0, result1, result2, result3, result4, result5; var pos0, pos1; pos0 = pos; result0 = parse_token(); - if (result0 !== null) { result1 = parse_LWS(); - if (result1 !== null) { result2 = parse_auth_param(); - if (result2 !== null) { result3 = []; pos1 = pos; result4 = parse_COMMA(); - if (result4 !== null) { result5 = parse_auth_param(); - if (result5 !== null) { result4 = [result4, result5]; } else { @@ -12526,15 +10538,12 @@ module.exports = function () { result4 = null; pos = pos1; } - while (result4 !== null) { result3.push(result4); pos1 = pos; result4 = parse_COMMA(); - if (result4 !== null) { result5 = parse_auth_param(); - if (result5 !== null) { result4 = [result4, result5]; } else { @@ -12546,7 +10555,6 @@ module.exports = function () { pos = pos1; } } - if (result3 !== null) { result0 = [result0, result1, result2, result3]; } else { @@ -12565,26 +10573,20 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_auth_param() { var result0, result1, result2; var pos0; pos0 = pos; result0 = parse_token(); - if (result0 !== null) { result1 = parse_EQUAL(); - if (result1 !== null) { result2 = parse_token(); - if (result2 === null) { result2 = parse_quoted_string(); } - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -12599,32 +10601,23 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_digest_cln() { var result0; result0 = parse_realm(); - if (result0 === null) { result0 = parse_domain(); - if (result0 === null) { result0 = parse_nonce(); - if (result0 === null) { result0 = parse_opaque(); - if (result0 === null) { result0 = parse_stale(); - if (result0 === null) { result0 = parse_algorithm(); - if (result0 === null) { result0 = parse_qop_options(); - if (result0 === null) { result0 = parse_auth_param(); } @@ -12634,32 +10627,25 @@ module.exports = function () { } } } - return result0; } - function parse_realm() { var result0, result1, result2; var pos0; pos0 = pos; - if (input.substr(pos, 5).toLowerCase() === "realm") { result0 = input.substr(pos, 5); pos += 5; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"realm\""); } } - if (result0 !== null) { result1 = parse_EQUAL(); - if (result1 !== null) { result2 = parse_realm_value(); - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -12674,62 +10660,48 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_realm_value() { var result0; var pos0; pos0 = pos; result0 = parse_quoted_string_clean(); - if (result0 !== null) { result0 = function (offset, realm) { data.realm = realm; }(pos0, result0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_domain() { var result0, result1, result2, result3, result4, result5, result6; var pos0, pos1; pos0 = pos; - if (input.substr(pos, 6).toLowerCase() === "domain") { result0 = input.substr(pos, 6); pos += 6; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"domain\""); } } - if (result0 !== null) { result1 = parse_EQUAL(); - if (result1 !== null) { result2 = parse_LDQUOT(); - if (result2 !== null) { result3 = parse_URI(); - if (result3 !== null) { result4 = []; pos1 = pos; result6 = parse_SP(); - if (result6 !== null) { result5 = []; - while (result6 !== null) { result5.push(result6); result6 = parse_SP(); @@ -12737,10 +10709,8 @@ module.exports = function () { } else { result5 = null; } - if (result5 !== null) { result6 = parse_URI(); - if (result6 !== null) { result5 = [result5, result6]; } else { @@ -12751,15 +10721,12 @@ module.exports = function () { result5 = null; pos = pos1; } - while (result5 !== null) { result4.push(result5); pos1 = pos; result6 = parse_SP(); - if (result6 !== null) { result5 = []; - while (result6 !== null) { result5.push(result6); result6 = parse_SP(); @@ -12767,10 +10734,8 @@ module.exports = function () { } else { result5 = null; } - if (result5 !== null) { result6 = parse_URI(); - if (result6 !== null) { result5 = [result5, result6]; } else { @@ -12782,10 +10747,8 @@ module.exports = function () { pos = pos1; } } - if (result4 !== null) { result5 = parse_RDQUOT(); - if (result5 !== null) { result0 = [result0, result1, result2, result3, result4, result5]; } else { @@ -12812,43 +10775,33 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_URI() { var result0; result0 = parse_absoluteURI(); - if (result0 === null) { result0 = parse_abs_path(); } - return result0; } - function parse_nonce() { var result0, result1, result2; var pos0; pos0 = pos; - if (input.substr(pos, 5).toLowerCase() === "nonce") { result0 = input.substr(pos, 5); pos += 5; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"nonce\""); } } - if (result0 !== null) { result1 = parse_EQUAL(); - if (result1 !== null) { result2 = parse_nonce_value(); - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -12863,52 +10816,41 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_nonce_value() { var result0; var pos0; pos0 = pos; result0 = parse_quoted_string_clean(); - if (result0 !== null) { result0 = function (offset, nonce) { data.nonce = nonce; }(pos0, result0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_opaque() { var result0, result1, result2; var pos0, pos1; pos0 = pos; pos1 = pos; - if (input.substr(pos, 6).toLowerCase() === "opaque") { result0 = input.substr(pos, 6); pos += 6; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"opaque\""); } } - if (result0 !== null) { result1 = parse_EQUAL(); - if (result1 !== null) { result2 = parse_quoted_string_clean(); - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -12923,88 +10865,70 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset, opaque) { data.opaque = opaque; }(pos0, result0[2]); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_stale() { var result0, result1, result2; var pos0, pos1; pos0 = pos; - if (input.substr(pos, 5).toLowerCase() === "stale") { result0 = input.substr(pos, 5); pos += 5; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"stale\""); } } - if (result0 !== null) { result1 = parse_EQUAL(); - if (result1 !== null) { pos1 = pos; - if (input.substr(pos, 4).toLowerCase() === "true") { result2 = input.substr(pos, 4); pos += 4; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\"true\""); } } - if (result2 !== null) { result2 = function (offset) { data.stale = true; }(pos1); } - if (result2 === null) { pos = pos1; } - if (result2 === null) { pos1 = pos; - if (input.substr(pos, 5).toLowerCase() === "false") { result2 = input.substr(pos, 5); pos += 5; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\"false\""); } } - if (result2 !== null) { result2 = function (offset) { data.stale = false; }(pos1); } - if (result2 === null) { pos = pos1; } } - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -13019,59 +10943,48 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_algorithm() { var result0, result1, result2; var pos0, pos1; pos0 = pos; pos1 = pos; - if (input.substr(pos, 9).toLowerCase() === "algorithm") { result0 = input.substr(pos, 9); pos += 9; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"algorithm\""); } } - if (result0 !== null) { result1 = parse_EQUAL(); - if (result1 !== null) { if (input.substr(pos, 3).toLowerCase() === "md5") { result2 = input.substr(pos, 3); pos += 3; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\"MD5\""); } } - if (result2 === null) { if (input.substr(pos, 8).toLowerCase() === "md5-sess") { result2 = input.substr(pos, 8); pos += 8; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\"MD5-sess\""); } } - if (result2 === null) { result2 = parse_token(); } } - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -13086,64 +10999,50 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset, algorithm) { data.algorithm = algorithm.toUpperCase(); }(pos0, result0[2]); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_qop_options() { var result0, result1, result2, result3, result4, result5, result6; var pos0, pos1, pos2; pos0 = pos; - if (input.substr(pos, 3).toLowerCase() === "qop") { result0 = input.substr(pos, 3); pos += 3; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"qop\""); } } - if (result0 !== null) { result1 = parse_EQUAL(); - if (result1 !== null) { result2 = parse_LDQUOT(); - if (result2 !== null) { pos1 = pos; result3 = parse_qop_value(); - if (result3 !== null) { result4 = []; pos2 = pos; - if (input.charCodeAt(pos) === 44) { result5 = ","; pos++; } else { result5 = null; - if (reportFailures === 0) { matchFailed("\",\""); } } - if (result5 !== null) { result6 = parse_qop_value(); - if (result6 !== null) { result5 = [result5, result6]; } else { @@ -13154,25 +11053,20 @@ module.exports = function () { result5 = null; pos = pos2; } - while (result5 !== null) { result4.push(result5); pos2 = pos; - if (input.charCodeAt(pos) === 44) { result5 = ","; pos++; } else { result5 = null; - if (reportFailures === 0) { matchFailed("\",\""); } } - if (result5 !== null) { result6 = parse_qop_value(); - if (result6 !== null) { result5 = [result5, result6]; } else { @@ -13184,7 +11078,6 @@ module.exports = function () { pos = pos2; } } - if (result4 !== null) { result3 = [result3, result4]; } else { @@ -13195,10 +11088,8 @@ module.exports = function () { result3 = null; pos = pos1; } - if (result3 !== null) { result4 = parse_RDQUOT(); - if (result4 !== null) { result0 = [result0, result1, result2, result3, result4]; } else { @@ -13221,71 +11112,57 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_qop_value() { var result0; var pos0; pos0 = pos; - if (input.substr(pos, 8).toLowerCase() === "auth-int") { result0 = input.substr(pos, 8); pos += 8; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"auth-int\""); } } - if (result0 === null) { if (input.substr(pos, 4).toLowerCase() === "auth") { result0 = input.substr(pos, 4); pos += 4; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"auth\""); } } - if (result0 === null) { result0 = parse_token(); } } - if (result0 !== null) { result0 = function (offset, qop_value) { data.qop || (data.qop = []); data.qop.push(qop_value.toLowerCase()); }(pos0, result0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_Proxy_Require() { var result0, result1, result2, result3; var pos0, pos1; pos0 = pos; result0 = parse_token(); - if (result0 !== null) { result1 = []; pos1 = pos; result2 = parse_COMMA(); - if (result2 !== null) { result3 = parse_token(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -13296,15 +11173,12 @@ module.exports = function () { result2 = null; pos = pos1; } - while (result2 !== null) { result1.push(result2); pos1 = pos; result2 = parse_COMMA(); - if (result2 !== null) { result3 = parse_token(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -13316,7 +11190,6 @@ module.exports = function () { pos = pos1; } } - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -13327,25 +11200,20 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_Record_Route() { var result0, result1, result2, result3; var pos0, pos1, pos2; pos0 = pos; pos1 = pos; result0 = parse_rec_route(); - if (result0 !== null) { result1 = []; pos2 = pos; result2 = parse_COMMA(); - if (result2 !== null) { result3 = parse_rec_route(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -13356,15 +11224,12 @@ module.exports = function () { result2 = null; pos = pos2; } - while (result2 !== null) { result1.push(result2); pos2 = pos; result2 = parse_COMMA(); - if (result2 !== null) { result3 = parse_rec_route(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -13376,7 +11241,6 @@ module.exports = function () { pos = pos2; } } - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -13387,19 +11251,16 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset) { var idx, length; length = data.multi_header.length; - for (idx = 0; idx < length; idx++) { if (data.multi_header[idx].parsed === null) { data = null; break; } } - if (data !== null) { data = data.multi_header; } else { @@ -13407,29 +11268,23 @@ module.exports = function () { } }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_rec_route() { var result0, result1, result2, result3; var pos0, pos1, pos2; pos0 = pos; pos1 = pos; result0 = parse_name_addr(); - if (result0 !== null) { result1 = []; pos2 = pos; result2 = parse_SEMI(); - if (result2 !== null) { result3 = parse_generic_param(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -13440,15 +11295,12 @@ module.exports = function () { result2 = null; pos = pos2; } - while (result2 !== null) { result1.push(result2); pos2 = pos; result2 = parse_SEMI(); - if (result2 !== null) { result3 = parse_generic_param(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -13460,7 +11312,6 @@ module.exports = function () { pos = pos2; } } - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -13471,12 +11322,10 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset) { var header; if (!data.multi_header) data.multi_header = []; - try { header = new NameAddrHeader(data.uri, data.display_name, data.params); delete data.uri; @@ -13485,7 +11334,6 @@ module.exports = function () { } catch (e) { header = null; } - data.multi_header.push({ 'possition': pos, 'offset': offset, @@ -13493,43 +11341,34 @@ module.exports = function () { }); }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_Reason() { var result0, result1, result2, result3; var pos0, pos1, pos2; pos0 = pos; pos1 = pos; - if (input.substr(pos, 3).toLowerCase() === "sip") { result0 = input.substr(pos, 3); pos += 3; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"SIP\""); } } - if (result0 === null) { result0 = parse_token(); } - if (result0 !== null) { result1 = []; pos2 = pos; result2 = parse_SEMI(); - if (result2 !== null) { result3 = parse_reason_param(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -13540,15 +11379,12 @@ module.exports = function () { result2 = null; pos = pos2; } - while (result2 !== null) { result1.push(result2); pos2 = pos; result2 = parse_SEMI(); - if (result2 !== null) { result3 = parse_reason_param(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -13560,7 +11396,6 @@ module.exports = function () { pos = pos2; } } - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -13571,12 +11406,10 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset, protocol) { data.protocol = protocol.toLowerCase(); if (!data.params) data.params = {}; - if (data.params.text && data.params.text[0] === '"') { var text = data.params.text; data.text = text.substring(1, text.length - 1); @@ -13584,51 +11417,39 @@ module.exports = function () { } }(pos0, result0[0]); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_reason_param() { var result0; result0 = parse_reason_cause(); - if (result0 === null) { result0 = parse_generic_param(); } - return result0; } - function parse_reason_cause() { var result0, result1, result2, result3; var pos0, pos1; pos0 = pos; pos1 = pos; - if (input.substr(pos, 5).toLowerCase() === "cause") { result0 = input.substr(pos, 5); pos += 5; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"cause\""); } } - if (result0 !== null) { result1 = parse_EQUAL(); - if (result1 !== null) { result3 = parse_DIGIT(); - if (result3 !== null) { result2 = []; - while (result3 !== null) { result2.push(result3); result3 = parse_DIGIT(); @@ -13636,7 +11457,6 @@ module.exports = function () { } else { result2 = null; } - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -13651,34 +11471,27 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset, cause) { data.cause = parseInt(cause.join('')); }(pos0, result0[2]); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_Require() { var result0, result1, result2, result3; var pos0, pos1; pos0 = pos; result0 = parse_token(); - if (result0 !== null) { result1 = []; pos1 = pos; result2 = parse_COMMA(); - if (result2 !== null) { result3 = parse_token(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -13689,15 +11502,12 @@ module.exports = function () { result2 = null; pos = pos1; } - while (result2 !== null) { result1.push(result2); pos1 = pos; result2 = parse_COMMA(); - if (result2 !== null) { result3 = parse_token(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -13709,7 +11519,6 @@ module.exports = function () { pos = pos1; } } - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -13720,24 +11529,19 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_Route() { var result0, result1, result2, result3; var pos0, pos1; pos0 = pos; result0 = parse_route_param(); - if (result0 !== null) { result1 = []; pos1 = pos; result2 = parse_COMMA(); - if (result2 !== null) { result3 = parse_route_param(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -13748,15 +11552,12 @@ module.exports = function () { result2 = null; pos = pos1; } - while (result2 !== null) { result1.push(result2); pos1 = pos; result2 = parse_COMMA(); - if (result2 !== null) { result3 = parse_route_param(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -13768,7 +11569,6 @@ module.exports = function () { pos = pos1; } } - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -13779,24 +11579,19 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_route_param() { var result0, result1, result2, result3; var pos0, pos1; pos0 = pos; result0 = parse_name_addr(); - if (result0 !== null) { result1 = []; pos1 = pos; result2 = parse_SEMI(); - if (result2 !== null) { result3 = parse_generic_param(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -13807,15 +11602,12 @@ module.exports = function () { result2 = null; pos = pos1; } - while (result2 !== null) { result1.push(result2); pos1 = pos; result2 = parse_SEMI(); - if (result2 !== null) { result3 = parse_generic_param(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -13827,7 +11619,6 @@ module.exports = function () { pos = pos1; } } - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -13838,24 +11629,19 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_Subscription_State() { var result0, result1, result2, result3; var pos0, pos1; pos0 = pos; result0 = parse_substate_value(); - if (result0 !== null) { result1 = []; pos1 = pos; result2 = parse_SEMI(); - if (result2 !== null) { result3 = parse_subexp_params(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -13866,15 +11652,12 @@ module.exports = function () { result2 = null; pos = pos1; } - while (result2 !== null) { result1.push(result2); pos1 = pos; result2 = parse_SEMI(); - if (result2 !== null) { result3 = parse_subexp_params(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -13886,7 +11669,6 @@ module.exports = function () { pos = pos1; } } - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -13897,92 +11679,74 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_substate_value() { var result0; var pos0; pos0 = pos; - if (input.substr(pos, 6).toLowerCase() === "active") { result0 = input.substr(pos, 6); pos += 6; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"active\""); } } - if (result0 === null) { if (input.substr(pos, 7).toLowerCase() === "pending") { result0 = input.substr(pos, 7); pos += 7; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"pending\""); } } - if (result0 === null) { if (input.substr(pos, 10).toLowerCase() === "terminated") { result0 = input.substr(pos, 10); pos += 10; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"terminated\""); } } - if (result0 === null) { result0 = parse_token(); } } } - if (result0 !== null) { result0 = function (offset) { data.state = input.substring(pos, offset); }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_subexp_params() { var result0, result1, result2; var pos0, pos1; pos0 = pos; pos1 = pos; - if (input.substr(pos, 6).toLowerCase() === "reason") { result0 = input.substr(pos, 6); pos += 6; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"reason\""); } } - if (result0 !== null) { result1 = parse_EQUAL(); - if (result1 !== null) { result2 = parse_event_reason_value(); - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -13997,38 +11761,30 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset, reason) { if (typeof reason !== 'undefined') data.reason = reason; }(pos0, result0[2]); } - if (result0 === null) { pos = pos0; } - if (result0 === null) { pos0 = pos; pos1 = pos; - if (input.substr(pos, 7).toLowerCase() === "expires") { result0 = input.substr(pos, 7); pos += 7; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"expires\""); } } - if (result0 !== null) { result1 = parse_EQUAL(); - if (result1 !== null) { result2 = parse_delta_seconds(); - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -14043,38 +11799,30 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset, expires) { if (typeof expires !== 'undefined') data.expires = expires; }(pos0, result0[2]); } - if (result0 === null) { pos = pos0; } - if (result0 === null) { pos0 = pos; pos1 = pos; - if (input.substr(pos, 11).toLowerCase() === "retry_after") { result0 = input.substr(pos, 11); pos += 11; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"retry_after\""); } } - if (result0 !== null) { result1 = parse_EQUAL(); - if (result1 !== null) { result2 = parse_delta_seconds(); - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -14089,112 +11837,92 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset, retry_after) { if (typeof retry_after !== 'undefined') data.retry_after = retry_after; }(pos0, result0[2]); } - if (result0 === null) { pos = pos0; } - if (result0 === null) { result0 = parse_generic_param(); } } } - return result0; } - function parse_event_reason_value() { var result0; - if (input.substr(pos, 11).toLowerCase() === "deactivated") { result0 = input.substr(pos, 11); pos += 11; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"deactivated\""); } } - if (result0 === null) { if (input.substr(pos, 9).toLowerCase() === "probation") { result0 = input.substr(pos, 9); pos += 9; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"probation\""); } } - if (result0 === null) { if (input.substr(pos, 8).toLowerCase() === "rejected") { result0 = input.substr(pos, 8); pos += 8; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"rejected\""); } } - if (result0 === null) { if (input.substr(pos, 7).toLowerCase() === "timeout") { result0 = input.substr(pos, 7); pos += 7; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"timeout\""); } } - if (result0 === null) { if (input.substr(pos, 6).toLowerCase() === "giveup") { result0 = input.substr(pos, 6); pos += 6; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"giveup\""); } } - if (result0 === null) { if (input.substr(pos, 10).toLowerCase() === "noresource") { result0 = input.substr(pos, 10); pos += 10; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"noresource\""); } } - if (result0 === null) { if (input.substr(pos, 9).toLowerCase() === "invariant") { result0 = input.substr(pos, 9); pos += 9; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"invariant\""); } } - if (result0 === null) { result0 = parse_token(); } @@ -14204,31 +11932,25 @@ module.exports = function () { } } } - return result0; } - function parse_Subject() { var result0; result0 = parse_TEXT_UTF8_TRIM(); result0 = result0 !== null ? result0 : ""; return result0; } - function parse_Supported() { var result0, result1, result2, result3; var pos0, pos1; pos0 = pos; result0 = parse_token(); - if (result0 !== null) { result1 = []; pos1 = pos; result2 = parse_COMMA(); - if (result2 !== null) { result3 = parse_token(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -14239,15 +11961,12 @@ module.exports = function () { result2 = null; pos = pos1; } - while (result2 !== null) { result1.push(result2); pos1 = pos; result2 = parse_COMMA(); - if (result2 !== null) { result3 = parse_token(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -14259,7 +11978,6 @@ module.exports = function () { pos = pos1; } } - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -14270,30 +11988,24 @@ module.exports = function () { result0 = null; pos = pos0; } - result0 = result0 !== null ? result0 : ""; return result0; } - function parse_To() { var result0, result1, result2, result3; var pos0, pos1, pos2; pos0 = pos; pos1 = pos; result0 = parse_SIP_URI_noparams(); - if (result0 === null) { result0 = parse_name_addr(); } - if (result0 !== null) { result1 = []; pos2 = pos; result2 = parse_SEMI(); - if (result2 !== null) { result3 = parse_to_param(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -14304,15 +12016,12 @@ module.exports = function () { result2 = null; pos = pos2; } - while (result2 !== null) { result1.push(result2); pos2 = pos; result2 = parse_SEMI(); - if (result2 !== null) { result3 = parse_to_param(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -14324,7 +12033,6 @@ module.exports = function () { pos = pos2; } } - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -14335,14 +12043,11 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset) { var tag = data.tag; - try { data = new NameAddrHeader(data.uri, data.display_name, data.params); - if (tag) { data.setParam('tag', tag); } @@ -14351,39 +12056,30 @@ module.exports = function () { } }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_to_param() { var result0; result0 = parse_tag_param(); - if (result0 === null) { result0 = parse_generic_param(); } - return result0; } - function parse_Via() { var result0, result1, result2, result3; var pos0, pos1; pos0 = pos; result0 = parse_via_param(); - if (result0 !== null) { result1 = []; pos1 = pos; result2 = parse_COMMA(); - if (result2 !== null) { result3 = parse_via_param(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -14394,15 +12090,12 @@ module.exports = function () { result2 = null; pos = pos1; } - while (result2 !== null) { result1.push(result2); pos1 = pos; result2 = parse_COMMA(); - if (result2 !== null) { result3 = parse_via_param(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -14414,7 +12107,6 @@ module.exports = function () { pos = pos1; } } - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -14425,30 +12117,23 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_via_param() { var result0, result1, result2, result3, result4, result5; var pos0, pos1; pos0 = pos; result0 = parse_sent_protocol(); - if (result0 !== null) { result1 = parse_LWS(); - if (result1 !== null) { result2 = parse_sent_by(); - if (result2 !== null) { result3 = []; pos1 = pos; result4 = parse_SEMI(); - if (result4 !== null) { result5 = parse_via_params(); - if (result5 !== null) { result4 = [result4, result5]; } else { @@ -14459,15 +12144,12 @@ module.exports = function () { result4 = null; pos = pos1; } - while (result4 !== null) { result3.push(result4); pos1 = pos; result4 = parse_SEMI(); - if (result4 !== null) { result5 = parse_via_params(); - if (result5 !== null) { result4 = [result4, result5]; } else { @@ -14479,7 +12161,6 @@ module.exports = function () { pos = pos1; } } - if (result3 !== null) { result0 = [result0, result1, result2, result3]; } else { @@ -14498,26 +12179,19 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_via_params() { var result0; result0 = parse_via_ttl(); - if (result0 === null) { result0 = parse_via_maddr(); - if (result0 === null) { result0 = parse_via_received(); - if (result0 === null) { result0 = parse_via_branch(); - if (result0 === null) { result0 = parse_response_port(); - if (result0 === null) { result0 = parse_generic_param(); } @@ -14525,33 +12199,26 @@ module.exports = function () { } } } - return result0; } - function parse_via_ttl() { var result0, result1, result2; var pos0, pos1; pos0 = pos; pos1 = pos; - if (input.substr(pos, 3).toLowerCase() === "ttl") { result0 = input.substr(pos, 3); pos += 3; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"ttl\""); } } - if (result0 !== null) { result1 = parse_EQUAL(); - if (result1 !== null) { result2 = parse_ttl(); - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -14566,43 +12233,34 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset, via_ttl_value) { data.ttl = via_ttl_value; }(pos0, result0[2]); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_via_maddr() { var result0, result1, result2; var pos0, pos1; pos0 = pos; pos1 = pos; - if (input.substr(pos, 5).toLowerCase() === "maddr") { result0 = input.substr(pos, 5); pos += 5; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"maddr\""); } } - if (result0 !== null) { result1 = parse_EQUAL(); - if (result1 !== null) { result2 = parse_host(); - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -14617,47 +12275,37 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset, via_maddr) { data.maddr = via_maddr; }(pos0, result0[2]); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_via_received() { var result0, result1, result2; var pos0, pos1; pos0 = pos; pos1 = pos; - if (input.substr(pos, 8).toLowerCase() === "received") { result0 = input.substr(pos, 8); pos += 8; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"received\""); } } - if (result0 !== null) { result1 = parse_EQUAL(); - if (result1 !== null) { result2 = parse_IPv4address(); - if (result2 === null) { result2 = parse_IPv6address(); } - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -14672,43 +12320,34 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset, via_received) { data.received = via_received; }(pos0, result0[2]); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_via_branch() { var result0, result1, result2; var pos0, pos1; pos0 = pos; pos1 = pos; - if (input.substr(pos, 6).toLowerCase() === "branch") { result0 = input.substr(pos, 6); pos += 6; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"branch\""); } } - if (result0 !== null) { result1 = parse_EQUAL(); - if (result1 !== null) { result2 = parse_token(); - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -14723,43 +12362,34 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset, via_branch) { data.branch = via_branch; }(pos0, result0[2]); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_response_port() { var result0, result1, result2; var pos0, pos1; pos0 = pos; - if (input.substr(pos, 5).toLowerCase() === "rport") { result0 = input.substr(pos, 5); pos += 5; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"rport\""); } } - if (result0 !== null) { pos1 = pos; result1 = parse_EQUAL(); - if (result1 !== null) { result2 = parse_rport(); - if (result2 !== null) { result1 = [result1, result2]; } else { @@ -14770,9 +12400,7 @@ module.exports = function () { result1 = null; pos = pos1; } - result1 = result1 !== null ? result1 : ""; - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -14783,10 +12411,8 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_rport() { var result0, result1, result2, result3, result4; var pos0, pos1; @@ -14794,23 +12420,18 @@ module.exports = function () { pos1 = pos; result0 = parse_DIGIT(); result0 = result0 !== null ? result0 : ""; - if (result0 !== null) { result1 = parse_DIGIT(); result1 = result1 !== null ? result1 : ""; - if (result1 !== null) { result2 = parse_DIGIT(); result2 = result2 !== null ? result2 : ""; - if (result2 !== null) { result3 = parse_DIGIT(); result3 = result3 !== null ? result3 : ""; - if (result3 !== null) { result4 = parse_DIGIT(); result4 = result4 !== null ? result4 : ""; - if (result4 !== null) { result0 = [result0, result1, result2, result3, result4]; } else { @@ -14833,38 +12454,29 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset, rport) { data.rport = parseInt(rport.join('')); }(pos0, result0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_sent_protocol() { var result0, result1, result2, result3, result4; var pos0; pos0 = pos; result0 = parse_protocol_name(); - if (result0 !== null) { result1 = parse_SLASH(); - if (result1 !== null) { result2 = parse_token(); - if (result2 !== null) { result3 = parse_SLASH(); - if (result3 !== null) { result4 = parse_transport(); - if (result4 !== null) { result0 = [result0, result1, result2, result3, result4]; } else { @@ -14887,128 +12499,103 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_protocol_name() { var result0; var pos0; pos0 = pos; - if (input.substr(pos, 3).toLowerCase() === "sip") { result0 = input.substr(pos, 3); pos += 3; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"SIP\""); } } - if (result0 === null) { result0 = parse_token(); } - if (result0 !== null) { result0 = function (offset, via_protocol) { data.protocol = via_protocol; }(pos0, result0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_transport() { var result0; var pos0; pos0 = pos; - if (input.substr(pos, 3).toLowerCase() === "udp") { result0 = input.substr(pos, 3); pos += 3; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"UDP\""); } } - if (result0 === null) { if (input.substr(pos, 3).toLowerCase() === "tcp") { result0 = input.substr(pos, 3); pos += 3; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"TCP\""); } } - if (result0 === null) { if (input.substr(pos, 3).toLowerCase() === "tls") { result0 = input.substr(pos, 3); pos += 3; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"TLS\""); } } - if (result0 === null) { if (input.substr(pos, 4).toLowerCase() === "sctp") { result0 = input.substr(pos, 4); pos += 4; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"SCTP\""); } } - if (result0 === null) { result0 = parse_token(); } } } } - if (result0 !== null) { result0 = function (offset, via_transport) { data.transport = via_transport; }(pos0, result0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_sent_by() { var result0, result1, result2; var pos0, pos1; pos0 = pos; result0 = parse_via_host(); - if (result0 !== null) { pos1 = pos; result1 = parse_COLON(); - if (result1 !== null) { result2 = parse_via_port(); - if (result2 !== null) { result1 = [result1, result2]; } else { @@ -15019,9 +12606,7 @@ module.exports = function () { result1 = null; pos = pos1; } - result1 = result1 !== null ? result1 : ""; - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -15032,37 +12617,29 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_via_host() { var result0; var pos0; pos0 = pos; result0 = parse_IPv4address(); - if (result0 === null) { result0 = parse_IPv6reference(); - if (result0 === null) { result0 = parse_hostname(); } } - if (result0 !== null) { result0 = function (offset) { data.host = input.substring(pos, offset); }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_via_port() { var result0, result1, result2, result3, result4; var pos0, pos1; @@ -15070,23 +12647,18 @@ module.exports = function () { pos1 = pos; result0 = parse_DIGIT(); result0 = result0 !== null ? result0 : ""; - if (result0 !== null) { result1 = parse_DIGIT(); result1 = result1 !== null ? result1 : ""; - if (result1 !== null) { result2 = parse_DIGIT(); result2 = result2 !== null ? result2 : ""; - if (result2 !== null) { result3 = parse_DIGIT(); result3 = result3 !== null ? result3 : ""; - if (result3 !== null) { result4 = parse_DIGIT(); result4 = result4 !== null ? result4 : ""; - if (result4 !== null) { result0 = [result0, result1, result2, result3, result4]; } else { @@ -15109,35 +12681,28 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset, via_sent_by_port) { data.port = parseInt(via_sent_by_port.join('')); }(pos0, result0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_ttl() { var result0, result1, result2; var pos0, pos1; pos0 = pos; pos1 = pos; result0 = parse_DIGIT(); - if (result0 !== null) { result1 = parse_DIGIT(); result1 = result1 !== null ? result1 : ""; - if (result1 !== null) { result2 = parse_DIGIT(); result2 = result2 !== null ? result2 : ""; - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -15152,40 +12717,32 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset, ttl) { return parseInt(ttl.join('')); }(pos0, result0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_WWW_Authenticate() { var result0; result0 = parse_challenge(); return result0; } - function parse_Session_Expires() { var result0, result1, result2, result3; var pos0, pos1; pos0 = pos; result0 = parse_s_e_expires(); - if (result0 !== null) { result1 = []; pos1 = pos; result2 = parse_SEMI(); - if (result2 !== null) { result3 = parse_s_e_params(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -15196,15 +12753,12 @@ module.exports = function () { result2 = null; pos = pos1; } - while (result2 !== null) { result1.push(result2); pos1 = pos; result2 = parse_SEMI(); - if (result2 !== null) { result3 = parse_s_e_params(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -15216,7 +12770,6 @@ module.exports = function () { pos = pos1; } } - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -15227,85 +12780,68 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_s_e_expires() { var result0; var pos0; pos0 = pos; result0 = parse_delta_seconds(); - if (result0 !== null) { result0 = function (offset, expires) { data.expires = expires; }(pos0, result0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_s_e_params() { var result0; result0 = parse_s_e_refresher(); - if (result0 === null) { result0 = parse_generic_param(); } - return result0; } - function parse_s_e_refresher() { var result0, result1, result2; var pos0, pos1; pos0 = pos; pos1 = pos; - if (input.substr(pos, 9).toLowerCase() === "refresher") { result0 = input.substr(pos, 9); pos += 9; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"refresher\""); } } - if (result0 !== null) { result1 = parse_EQUAL(); - if (result1 !== null) { if (input.substr(pos, 3).toLowerCase() === "uac") { result2 = input.substr(pos, 3); pos += 3; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\"uac\""); } } - if (result2 === null) { if (input.substr(pos, 3).toLowerCase() === "uas") { result2 = input.substr(pos, 3); pos += 3; } else { result2 = null; - if (reportFailures === 0) { matchFailed("\"uas\""); } } } - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -15320,32 +12856,25 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset, s_e_refresher_value) { data.refresher = s_e_refresher_value.toLowerCase(); }(pos0, result0[2]); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_extension_header() { var result0, result1, result2; var pos0; pos0 = pos; result0 = parse_token(); - if (result0 !== null) { result1 = parse_HCOLON(); - if (result1 !== null) { result2 = parse_header_value(); - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -15360,71 +12889,55 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_header_value() { var result0, result1; result0 = []; result1 = parse_TEXT_UTF8char(); - if (result1 === null) { result1 = parse_UTF8_CONT(); - if (result1 === null) { result1 = parse_LWS(); } } - while (result1 !== null) { result0.push(result1); result1 = parse_TEXT_UTF8char(); - if (result1 === null) { result1 = parse_UTF8_CONT(); - if (result1 === null) { result1 = parse_LWS(); } } } - return result0; } - function parse_message_body() { var result0, result1; result0 = []; result1 = parse_OCTET(); - while (result1 !== null) { result0.push(result1); result1 = parse_OCTET(); } - return result0; } - function parse_uuid_URI() { var result0, result1; var pos0; pos0 = pos; - if (input.substr(pos, 5) === "uuid:") { result0 = "uuid:"; pos += 5; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"uuid:\""); } } - if (result0 !== null) { result1 = parse_uuid(); - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -15435,77 +12948,62 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_uuid() { var result0, result1, result2, result3, result4, result5, result6, result7, result8; var pos0, pos1; pos0 = pos; pos1 = pos; result0 = parse_hex8(); - if (result0 !== null) { if (input.charCodeAt(pos) === 45) { result1 = "-"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"-\""); } } - if (result1 !== null) { result2 = parse_hex4(); - if (result2 !== null) { if (input.charCodeAt(pos) === 45) { result3 = "-"; pos++; } else { result3 = null; - if (reportFailures === 0) { matchFailed("\"-\""); } } - if (result3 !== null) { result4 = parse_hex4(); - if (result4 !== null) { if (input.charCodeAt(pos) === 45) { result5 = "-"; pos++; } else { result5 = null; - if (reportFailures === 0) { matchFailed("\"-\""); } } - if (result5 !== null) { result6 = parse_hex4(); - if (result6 !== null) { if (input.charCodeAt(pos) === 45) { result7 = "-"; pos++; } else { result7 = null; - if (reportFailures === 0) { matchFailed("\"-\""); } } - if (result7 !== null) { result8 = parse_hex12(); - if (result8 !== null) { result0 = [result0, result1, result2, result3, result4, result5, result6, result7, result8]; } else { @@ -15544,35 +13042,27 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset, uuid) { data = input.substring(pos + 5, offset); }(pos0, result0[0]); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_hex4() { var result0, result1, result2, result3; var pos0; pos0 = pos; result0 = parse_HEXDIG(); - if (result0 !== null) { result1 = parse_HEXDIG(); - if (result1 !== null) { result2 = parse_HEXDIG(); - if (result2 !== null) { result3 = parse_HEXDIG(); - if (result3 !== null) { result0 = [result0, result1, result2, result3]; } else { @@ -15591,19 +13081,15 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_hex8() { var result0, result1; var pos0; pos0 = pos; result0 = parse_hex4(); - if (result0 !== null) { result1 = parse_hex4(); - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -15614,22 +13100,17 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_hex12() { var result0, result1, result2; var pos0; pos0 = pos; result0 = parse_hex4(); - if (result0 !== null) { result1 = parse_hex4(); - if (result1 !== null) { result2 = parse_hex4(); - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -15644,29 +13125,23 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_Refer_To() { var result0, result1, result2, result3; var pos0, pos1, pos2; pos0 = pos; pos1 = pos; result0 = parse_SIP_URI_noparams(); - if (result0 === null) { result0 = parse_name_addr(); } - if (result0 !== null) { result1 = []; pos2 = pos; result2 = parse_SEMI(); - if (result2 !== null) { result3 = parse_generic_param(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -15677,15 +13152,12 @@ module.exports = function () { result2 = null; pos = pos2; } - while (result2 !== null) { result1.push(result2); pos2 = pos; result2 = parse_SEMI(); - if (result2 !== null) { result3 = parse_generic_param(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -15697,7 +13169,6 @@ module.exports = function () { pos = pos2; } } - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -15708,7 +13179,6 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset) { try { @@ -15718,28 +13188,22 @@ module.exports = function () { } }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_Replaces() { var result0, result1, result2, result3; var pos0, pos1; pos0 = pos; result0 = parse_call_id(); - if (result0 !== null) { result1 = []; pos1 = pos; result2 = parse_SEMI(); - if (result2 !== null) { result3 = parse_replaces_param(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -15750,15 +13214,12 @@ module.exports = function () { result2 = null; pos = pos1; } - while (result2 !== null) { result1.push(result2); pos1 = pos; result2 = parse_SEMI(); - if (result2 !== null) { result3 = parse_replaces_param(); - if (result3 !== null) { result2 = [result2, result3]; } else { @@ -15770,7 +13231,6 @@ module.exports = function () { pos = pos1; } } - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -15781,34 +13241,27 @@ module.exports = function () { result0 = null; pos = pos0; } - return result0; } - function parse_call_id() { var result0, result1, result2; var pos0, pos1, pos2; pos0 = pos; pos1 = pos; result0 = parse_word(); - if (result0 !== null) { pos2 = pos; - if (input.charCodeAt(pos) === 64) { result1 = "@"; pos++; } else { result1 = null; - if (reportFailures === 0) { matchFailed("\"@\""); } } - if (result1 !== null) { result2 = parse_word(); - if (result2 !== null) { result1 = [result1, result2]; } else { @@ -15819,9 +13272,7 @@ module.exports = function () { result1 = null; pos = pos2; } - result1 = result1 !== null ? result1 : ""; - if (result1 !== null) { result0 = [result0, result1]; } else { @@ -15832,62 +13283,48 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset) { data.call_id = input.substring(pos, offset); }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_replaces_param() { var result0; result0 = parse_to_tag(); - if (result0 === null) { result0 = parse_from_tag(); - if (result0 === null) { result0 = parse_early_flag(); - if (result0 === null) { result0 = parse_generic_param(); } } } - return result0; } - function parse_to_tag() { var result0, result1, result2; var pos0, pos1; pos0 = pos; pos1 = pos; - if (input.substr(pos, 6) === "to-tag") { result0 = "to-tag"; pos += 6; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"to-tag\""); } } - if (result0 !== null) { result1 = parse_EQUAL(); - if (result1 !== null) { result2 = parse_token(); - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -15902,43 +13339,34 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset, to_tag) { data.to_tag = to_tag; }(pos0, result0[2]); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_from_tag() { var result0, result1, result2; var pos0, pos1; pos0 = pos; pos1 = pos; - if (input.substr(pos, 8) === "from-tag") { result0 = "from-tag"; pos += 8; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"from-tag\""); } } - if (result0 !== null) { result1 = parse_EQUAL(); - if (result1 !== null) { result2 = parse_token(); - if (result2 !== null) { result0 = [result0, result1, result2]; } else { @@ -15953,64 +13381,51 @@ module.exports = function () { result0 = null; pos = pos1; } - if (result0 !== null) { result0 = function (offset, from_tag) { data.from_tag = from_tag; }(pos0, result0[2]); } - if (result0 === null) { pos = pos0; } - return result0; } - function parse_early_flag() { var result0; var pos0; pos0 = pos; - if (input.substr(pos, 10) === "early-only") { result0 = "early-only"; pos += 10; } else { result0 = null; - if (reportFailures === 0) { matchFailed("\"early-only\""); } } - if (result0 !== null) { result0 = function (offset) { data.early_only = true; }(pos0); } - if (result0 === null) { pos = pos0; } - return result0; } - function cleanupExpected(expected) { expected.sort(); var lastExpected = null; var cleanExpected = []; - for (var i = 0; i < expected.length; i++) { if (expected[i] !== lastExpected) { cleanExpected.push(expected[i]); lastExpected = expected[i]; } } - return cleanExpected; } - function computeErrorPosition() { /* * The first idea was to use |String.split| to break the input up to the @@ -16021,15 +13436,12 @@ module.exports = function () { var line = 1; var column = 1; var seenCR = false; - for (var i = 0; i < Math.max(pos, rightmostFailuresPos); i++) { var ch = input.charAt(i); - if (ch === "\n") { if (!seenCR) { line++; } - column = 1; seenCR = false; } else if (ch === "\r" || ch === "\u2028" || ch === "\u2029") { @@ -16041,17 +13453,13 @@ module.exports = function () { seenCR = false; } } - return { line: line, column: column }; } - var URI = require('./URI'); - var NameAddrHeader = require('./NameAddrHeader'); - var data = {}; var result = parseFunctions[startRule](); /* @@ -16078,7 +13486,6 @@ module.exports = function () { * All code following this comment (including called functions) must * handle these states. */ - if (result === null || pos !== input.length) { var offset = Math.max(pos, rightmostFailuresPos); var found = offset < input.length ? input.charAt(offset) : null; @@ -16086,38 +13493,30 @@ module.exports = function () { new this.SyntaxError(cleanupExpected(rightmostFailuresExpected), found, offset, errorPosition.line, errorPosition.column); return -1; } - return data; }, - /* Returns the parser source code. */ toSource: function toSource() { return this._source; } }; /* Thrown when a parser encounters a syntax error. */ - result.SyntaxError = function (expected, found, offset, line, column) { function buildMessage(expected, found) { var expectedHumanized, foundHumanized; - switch (expected.length) { case 0: expectedHumanized = "end of input"; break; - case 1: expectedHumanized = expected[0]; break; - default: expectedHumanized = expected.slice(0, expected.length - 1).join(", ") + " or " + expected[expected.length - 1]; } - foundHumanized = found ? quote(found) : "end of input"; return "Expected " + expectedHumanized + " but " + foundHumanized + " found."; } - this.name = "SyntaxError"; this.expected = expected; this.found = found; @@ -16126,7 +13525,6 @@ module.exports = function () { this.line = line; this.column = column; }; - result.SyntaxError.prototype = Error.prototype; return result; }(); @@ -16134,30 +13532,20 @@ module.exports = function () { "use strict"; var pkg = require('../package.json'); - var C = require('./Constants'); - var Exceptions = require('./Exceptions'); - var Utils = require('./Utils'); - var UA = require('./UA'); - var URI = require('./URI'); - var NameAddrHeader = require('./NameAddrHeader'); - var Grammar = require('./Grammar'); - var WebSocketInterface = require('./WebSocketInterface'); - var debug = require('debug')('JsSIP'); - debug('version %s', pkg.version); + /** * Expose the JsSIP module. */ - module.exports = { C: C, Exceptions: Exceptions, @@ -16169,33 +13557,27 @@ module.exports = { Grammar: Grammar, // Expose the debug module. debug: require('debug'), - get name() { return pkg.title; }, - get version() { return pkg.version; } - }; },{"../package.json":40,"./Constants":2,"./Exceptions":6,"./Grammar":7,"./NameAddrHeader":11,"./UA":26,"./URI":27,"./Utils":28,"./WebSocketInterface":29,"debug":32}],9:[function(require,module,exports){ "use strict"; -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } var debug = require('debug'); - var APP_NAME = 'JsSIP'; - module.exports = /*#__PURE__*/function () { function Logger(prefix) { _classCallCheck(this, Logger); - if (prefix) { this._debug = debug["default"]("".concat(APP_NAME, ":").concat(prefix)); this._warn = debug["default"]("".concat(APP_NAME, ":WARN:").concat(prefix)); @@ -16206,15 +13588,12 @@ module.exports = /*#__PURE__*/function () { this._error = debug["default"]("".concat(APP_NAME, ":ERROR")); } /* eslint-disable no-console */ - - this._debug.log = console.info.bind(console); this._warn.log = console.warn.bind(console); this._error.log = console.error.bind(console); /* eslint-enable no-console */ } - - _createClass(Logger, [{ + return _createClass(Logger, [{ key: "debug", get: function get() { return this._debug; @@ -16230,124 +13609,107 @@ module.exports = /*#__PURE__*/function () { return this._error; } }]); - - return Logger; }(); },{"debug":32}],10:[function(require,module,exports){ "use strict"; -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } - -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } - -function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } - -function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - -function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - -function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } - -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } var EventEmitter = require('events').EventEmitter; - var Logger = require('./Logger'); - var JsSIP_C = require('./Constants'); - var SIPMessage = require('./SIPMessage'); - var Utils = require('./Utils'); - var RequestSender = require('./RequestSender'); - var Exceptions = require('./Exceptions'); - var URI = require('./URI'); - var logger = new Logger('Message'); - module.exports = /*#__PURE__*/function (_EventEmitter) { - _inherits(Message, _EventEmitter); - - var _super = _createSuper(Message); - function Message(ua) { var _this; - _classCallCheck(this, Message); - - _this = _super.call(this); + _this = _callSuper(this, Message); _this._ua = ua; _this._request = null; _this._closed = false; _this._direction = null; _this._local_identity = null; - _this._remote_identity = null; // Whether an incoming message has been replied. + _this._remote_identity = null; - _this._is_replied = false; // Custom message empty object for high level use. + // Whether an incoming message has been replied. + _this._is_replied = false; + // Custom message empty object for high level use. _this._data = {}; return _this; } - - _createClass(Message, [{ + _inherits(Message, _EventEmitter); + return _createClass(Message, [{ + key: "direction", + get: function get() { + return this._direction; + } + }, { + key: "local_identity", + get: function get() { + return this._local_identity; + } + }, { + key: "remote_identity", + get: function get() { + return this._remote_identity; + } + }, { key: "send", value: function send(target, body) { var _this2 = this; - var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var originalTarget = target; - if (target === undefined || body === undefined) { throw new TypeError('Not enough arguments'); - } // Check target validity. - + } + // Check target validity. target = this._ua.normalizeTarget(target); - if (!target) { throw new TypeError("Invalid target: ".concat(originalTarget)); - } // Get call options. - + } + // Get call options. var extraHeaders = Utils.cloneArray(options.extraHeaders); var eventHandlers = Utils.cloneObject(options.eventHandlers); var contentType = options.contentType || 'text/plain'; var requestParams = {}; - if (options.fromUserName) { requestParams.from_uri = new URI('sip', options.fromUserName, this._ua.configuration.uri.host); extraHeaders.push("P-Preferred-Identity: ".concat(this._ua.configuration.uri.toString())); } - if (options.fromDisplayName) { requestParams.from_display_name = options.fromDisplayName; - } // Set event handlers. - + } + // Set event handlers. for (var event in eventHandlers) { if (Object.prototype.hasOwnProperty.call(eventHandlers, event)) { this.on(event, eventHandlers[event]); } } - extraHeaders.push("Content-Type: ".concat(contentType)); this._request = new SIPMessage.OutgoingRequest(JsSIP_C.MESSAGE, target, this._ua, requestParams, extraHeaders); - if (body) { this._request.body = body; } - var request_sender = new RequestSender(this._ua, this._request, { onRequestTimeout: function onRequestTimeout() { _this2._onRequestTimeout(); @@ -16359,55 +13721,47 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { _this2._receiveResponse(response); } }); - this._newMessage('local', this._request); - request_sender.send(); } }, { key: "init_incoming", value: function init_incoming(request) { this._request = request; + this._newMessage('remote', request); - this._newMessage('remote', request); // Reply with a 200 OK if the user didn't reply. - - + // Reply with a 200 OK if the user didn't reply. if (!this._is_replied) { this._is_replied = true; request.reply(200); } - this._close(); } + /** * Accept the incoming Message * Only valid for incoming Messages */ - }, { key: "accept", value: function accept() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var extraHeaders = Utils.cloneArray(options.extraHeaders); var body = options.body; - if (this._direction !== 'incoming') { throw new Exceptions.NotSupportedError('"accept" not supported for outgoing Message'); } - if (this._is_replied) { throw new Error('incoming Message already replied'); } - this._is_replied = true; - this._request.reply(200, null, extraHeaders, body); } + /** * Reject the incoming Message * Only valid for incoming Messages */ - }, { key: "reject", value: function reject() { @@ -16416,21 +13770,16 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { var reason_phrase = options.reason_phrase; var extraHeaders = Utils.cloneArray(options.extraHeaders); var body = options.body; - if (this._direction !== 'incoming') { throw new Exceptions.NotSupportedError('"reject" not supported for outgoing Message'); } - if (this._is_replied) { throw new Error('incoming Message already replied'); } - if (status_code < 300 || status_code >= 700) { throw new TypeError("Invalid status_code: ".concat(status_code)); } - this._is_replied = true; - this._request.reply(status_code, reason_phrase, extraHeaders, body); } }, { @@ -16439,23 +13788,17 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { if (this._closed) { return; } - switch (true) { case /^1[0-9]{2}$/.test(response.status_code): // Ignore provisional responses. break; - case /^2[0-9]{2}$/.test(response.status_code): this._succeeded('remote', response); - break; - default: { var cause = Utils.sipErrorCause(response.status_code); - this._failed('remote', response, cause); - break; } } @@ -16466,7 +13809,6 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { if (this._closed) { return; } - this._failed('system', null, JsSIP_C.causes.REQUEST_TIMEOUT); } }, { @@ -16475,20 +13817,18 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { if (this._closed) { return; } - this._failed('system', null, JsSIP_C.causes.CONNECTION_ERROR); } }, { key: "_close", value: function _close() { this._closed = true; - this._ua.destroyMessage(this); } + /** * Internal Callbacks */ - }, { key: "_newMessage", value: function _newMessage(originator, request) { @@ -16501,7 +13841,6 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { this._local_identity = request.from; this._remote_identity = request.to; } - this._ua.newMessage(this, { originator: originator, message: this, @@ -16512,9 +13851,7 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { key: "_failed", value: function _failed(originator, response, cause) { logger.debug('MESSAGE failed'); - this._close(); - logger.debug('emit "failed"'); this.emit('failed', { originator: originator, @@ -16526,87 +13863,58 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { key: "_succeeded", value: function _succeeded(originator, response) { logger.debug('MESSAGE succeeded'); - this._close(); - logger.debug('emit "succeeded"'); this.emit('succeeded', { originator: originator, response: response }); } - }, { - key: "direction", - get: function get() { - return this._direction; - } - }, { - key: "local_identity", - get: function get() { - return this._local_identity; - } - }, { - key: "remote_identity", - get: function get() { - return this._remote_identity; - } }]); - - return Message; }(EventEmitter); },{"./Constants":2,"./Exceptions":6,"./Logger":9,"./RequestSender":20,"./SIPMessage":21,"./URI":27,"./Utils":28,"events":31}],11:[function(require,module,exports){ "use strict"; -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } var URI = require('./URI'); - var Grammar = require('./Grammar'); - module.exports = /*#__PURE__*/function () { - _createClass(NameAddrHeader, null, [{ - key: "parse", - - /** - * Parse the given string and returns a NameAddrHeader instance or undefined if - * it is an invalid NameAddrHeader. - */ - value: function parse(name_addr_header) { - name_addr_header = Grammar.parse(name_addr_header, 'Name_Addr_Header'); - - if (name_addr_header !== -1) { - return name_addr_header; - } else { - return undefined; - } - } - }]); - function NameAddrHeader(uri, display_name, parameters) { _classCallCheck(this, NameAddrHeader); - // Checks. if (!uri || !(uri instanceof URI)) { throw new TypeError('missing or invalid "uri" parameter'); - } // Initialize parameters. - + } + // Initialize parameters. this._uri = uri; this._parameters = {}; this.display_name = display_name; - for (var param in parameters) { if (Object.prototype.hasOwnProperty.call(parameters, param)) { this.setParam(param, parameters[param]); } } } - - _createClass(NameAddrHeader, [{ + return _createClass(NameAddrHeader, [{ + key: "uri", + get: function get() { + return this._uri; + } + }, { + key: "display_name", + get: function get() { + return this._display_name; + }, + set: function set(value) { + this._display_name = value === 0 ? '0' : value; + } + }, { key: "setParam", value: function setParam(key, value) { if (key) { @@ -16631,7 +13939,6 @@ module.exports = /*#__PURE__*/function () { key: "deleteParam", value: function deleteParam(parameter) { parameter = parameter.toLowerCase(); - if (this._parameters.hasOwnProperty(parameter)) { var value = this._parameters[parameter]; delete this._parameters[parameter]; @@ -16658,138 +13965,124 @@ module.exports = /*#__PURE__*/function () { value: function toString() { var body = this._display_name ? "\"".concat(this._quote(this._display_name), "\" ") : ''; body += "<".concat(this._uri.toString(), ">"); - for (var parameter in this._parameters) { if (Object.prototype.hasOwnProperty.call(this._parameters, parameter)) { body += ";".concat(parameter); - if (this._parameters[parameter] !== null) { body += "=".concat(this._parameters[parameter]); } } } - return body; } - }, { - key: "uri", - get: function get() { - return this._uri; - } - }, { - key: "display_name", - get: function get() { - return this._display_name; - }, - set: function set(value) { - this._display_name = value === 0 ? '0' : value; + }], [{ + key: "parse", + value: + /** + * Parse the given string and returns a NameAddrHeader instance or undefined if + * it is an invalid NameAddrHeader. + */ + function parse(name_addr_header) { + name_addr_header = Grammar.parse(name_addr_header, 'Name_Addr_Header'); + if (name_addr_header !== -1) { + return name_addr_header; + } else { + return undefined; + } } }]); - - return NameAddrHeader; }(); },{"./Grammar":7,"./URI":27}],12:[function(require,module,exports){ "use strict"; -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } - -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } - -function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } - -function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - -function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - -function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } - -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } var EventEmitter = require('events').EventEmitter; - var Logger = require('./Logger'); - var JsSIP_C = require('./Constants'); - var SIPMessage = require('./SIPMessage'); - var Utils = require('./Utils'); - var RequestSender = require('./RequestSender'); - var Exceptions = require('./Exceptions'); - var logger = new Logger('Options'); - module.exports = /*#__PURE__*/function (_EventEmitter) { - _inherits(Options, _EventEmitter); - - var _super = _createSuper(Options); - function Options(ua) { var _this; - _classCallCheck(this, Options); - - _this = _super.call(this); + _this = _callSuper(this, Options); _this._ua = ua; _this._request = null; _this._closed = false; _this._direction = null; _this._local_identity = null; - _this._remote_identity = null; // Whether an incoming message has been replied. + _this._remote_identity = null; - _this._is_replied = false; // Custom message empty object for high level use. + // Whether an incoming message has been replied. + _this._is_replied = false; + // Custom message empty object for high level use. _this._data = {}; return _this; } - - _createClass(Options, [{ + _inherits(Options, _EventEmitter); + return _createClass(Options, [{ + key: "direction", + get: function get() { + return this._direction; + } + }, { + key: "local_identity", + get: function get() { + return this._local_identity; + } + }, { + key: "remote_identity", + get: function get() { + return this._remote_identity; + } + }, { key: "send", value: function send(target, body) { var _this2 = this; - var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var originalTarget = target; - if (target === undefined) { throw new TypeError('A target is required for OPTIONS'); - } // Check target validity. - + } + // Check target validity. target = this._ua.normalizeTarget(target); - if (!target) { throw new TypeError("Invalid target: ".concat(originalTarget)); - } // Get call options. - + } + // Get call options. var extraHeaders = Utils.cloneArray(options.extraHeaders); var eventHandlers = Utils.cloneObject(options.eventHandlers); - var contentType = options.contentType || 'application/sdp'; // Set event handlers. + var contentType = options.contentType || 'application/sdp'; + // Set event handlers. for (var event in eventHandlers) { if (Object.prototype.hasOwnProperty.call(eventHandlers, event)) { this.on(event, eventHandlers[event]); } } - extraHeaders.push("Content-Type: ".concat(contentType)); this._request = new SIPMessage.OutgoingRequest(JsSIP_C.OPTIONS, target, this._ua, null, extraHeaders); - if (body) { this._request.body = body; } - var request_sender = new RequestSender(this._ua, this._request, { onRequestTimeout: function onRequestTimeout() { _this2._onRequestTimeout(); @@ -16801,55 +14094,47 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { _this2._receiveResponse(response); } }); - this._newOptions('local', this._request); - request_sender.send(); } }, { key: "init_incoming", value: function init_incoming(request) { this._request = request; + this._newOptions('remote', request); - this._newOptions('remote', request); // Reply with a 200 OK if the user didn't reply. - - + // Reply with a 200 OK if the user didn't reply. if (!this._is_replied) { this._is_replied = true; request.reply(200); } - this._close(); } + /** * Accept the incoming Options * Only valid for incoming Options */ - }, { key: "accept", value: function accept() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var extraHeaders = Utils.cloneArray(options.extraHeaders); var body = options.body; - if (this._direction !== 'incoming') { throw new Exceptions.NotSupportedError('"accept" not supported for outgoing Options'); } - if (this._is_replied) { throw new Error('incoming Options already replied'); } - this._is_replied = true; - this._request.reply(200, null, extraHeaders, body); } + /** * Reject the incoming Options * Only valid for incoming Options */ - }, { key: "reject", value: function reject() { @@ -16858,21 +14143,16 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { var reason_phrase = options.reason_phrase; var extraHeaders = Utils.cloneArray(options.extraHeaders); var body = options.body; - if (this._direction !== 'incoming') { throw new Exceptions.NotSupportedError('"reject" not supported for outgoing Options'); } - if (this._is_replied) { throw new Error('incoming Options already replied'); } - if (status_code < 300 || status_code >= 700) { throw new TypeError("Invalid status_code: ".concat(status_code)); } - this._is_replied = true; - this._request.reply(status_code, reason_phrase, extraHeaders, body); } }, { @@ -16881,23 +14161,17 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { if (this._closed) { return; } - switch (true) { case /^1[0-9]{2}$/.test(response.status_code): // Ignore provisional responses. break; - case /^2[0-9]{2}$/.test(response.status_code): this._succeeded('remote', response); - break; - default: { var cause = Utils.sipErrorCause(response.status_code); - this._failed('remote', response, cause); - break; } } @@ -16908,7 +14182,6 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { if (this._closed) { return; } - this._failed('system', null, JsSIP_C.causes.REQUEST_TIMEOUT); } }, { @@ -16917,20 +14190,18 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { if (this._closed) { return; } - this._failed('system', null, JsSIP_C.causes.CONNECTION_ERROR); } }, { key: "_close", value: function _close() { this._closed = true; - this._ua.destroyMessage(this); } + /** * Internal Callbacks */ - }, { key: "_newOptions", value: function _newOptions(originator, request) { @@ -16943,7 +14214,6 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { this._local_identity = request.from; this._remote_identity = request.to; } - this._ua.newOptions(this, { originator: originator, message: this, @@ -16954,9 +14224,7 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { key: "_failed", value: function _failed(originator, response, cause) { logger.debug('OPTIONS failed'); - this._close(); - logger.debug('emit "failed"'); this.emit('failed', { originator: originator, @@ -16968,68 +14236,41 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { key: "_succeeded", value: function _succeeded(originator, response) { logger.debug('OPTIONS succeeded'); - this._close(); - logger.debug('emit "succeeded"'); this.emit('succeeded', { originator: originator, response: response }); } - }, { - key: "direction", - get: function get() { - return this._direction; - } - }, { - key: "local_identity", - get: function get() { - return this._local_identity; - } - }, { - key: "remote_identity", - get: function get() { - return this._remote_identity; - } }]); - - return Options; }(EventEmitter); },{"./Constants":2,"./Exceptions":6,"./Logger":9,"./RequestSender":20,"./SIPMessage":21,"./Utils":28,"events":31}],13:[function(require,module,exports){ "use strict"; -function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } - -function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } - -function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } - +function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; } +function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } +function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } var Logger = require('./Logger'); - var Grammar = require('./Grammar'); - var SIPMessage = require('./SIPMessage'); - var logger = new Logger('Parser'); + /** * Parse SIP Message */ - exports.parseMessage = function (data, ua) { var message; var bodyStart; var headerEnd = data.indexOf('\r\n'); - if (headerEnd === -1) { logger.warn('parseMessage() | no CRLF found, not a SIP message'); return; - } // Parse first line. Check if it is a Request or a Reply. - + } + // Parse first line. Check if it is a Request or a Reply. var firstLine = data.substring(0, headerEnd); var parsed = Grammar.parse(firstLine, 'Request_Response'); - if (parsed === -1) { logger.warn("parseMessage() | error parsing first line of SIP message: \"".concat(firstLine, "\"")); return; @@ -17042,74 +14283,69 @@ exports.parseMessage = function (data, ua) { message.status_code = parsed.status_code; message.reason_phrase = parsed.reason_phrase; } - message.data = data; var headerStart = headerEnd + 2; + /* Loop over every line in data. Detect the end of each header and parse * it or simply add to the headers collection. */ - while (true) { - headerEnd = getHeader(data, headerStart); // The SIP message has normally finished. + headerEnd = getHeader(data, headerStart); + // The SIP message has normally finished. if (headerEnd === -2) { bodyStart = headerStart + 2; break; - } // Data.indexOf returned -1 due to a malformed message. + } + // Data.indexOf returned -1 due to a malformed message. else if (headerEnd === -1) { - logger.warn('parseMessage() | malformed message'); - return; - } - + logger.warn('parseMessage() | malformed message'); + return; + } parsed = parseHeader(message, data, headerStart, headerEnd); - if (parsed !== true) { logger.warn('parseMessage() |', parsed.error); return; } - headerStart = headerEnd + 2; } + /* RFC3261 18.3. * If there are additional bytes in the transport packet * beyond the end of the body, they MUST be discarded. */ - - if (message.hasHeader('content-length')) { var contentLength = message.getHeader('content-length'); message.body = data.substr(bodyStart, contentLength); } else { message.body = data.substring(bodyStart); } - return message; }; + /** * Extract and parse every header of a SIP message. */ - - function getHeader(data, headerStart) { // 'start' position of the header. - var start = headerStart; // 'end' position of the header. - - var end = 0; // 'partial end' position of the header. - - var partialEnd = 0; // End of message. + var start = headerStart; + // 'end' position of the header. + var end = 0; + // 'partial end' position of the header. + var partialEnd = 0; + // End of message. if (data.substring(start, start + 2).match(/(^\r\n)/)) { return -2; } - while (end === 0) { // Partial End of Header. - partialEnd = data.indexOf('\r\n', start); // 'indexOf' returns -1 if the value to be found never occurs. + partialEnd = data.indexOf('\r\n', start); + // 'indexOf' returns -1 if the value to be found never occurs. if (partialEnd === -1) { return partialEnd; } - if (!data.substring(partialEnd + 2, partialEnd + 4).match(/(^\r\n)/) && data.charAt(partialEnd + 2).match(/(^\s+)/)) { // Not the end of the message. Continue from the next position. start = partialEnd + 2; @@ -17117,24 +14353,21 @@ function getHeader(data, headerStart) { end = partialEnd; } } - return end; } - function parseHeader(message, data, headerStart, headerEnd) { var parsed; var hcolonIndex = data.indexOf(':', headerStart); var headerName = data.substring(headerStart, hcolonIndex).trim(); - var headerValue = data.substring(hcolonIndex + 1, headerEnd).trim(); // If header-field is well-known, parse it. + var headerValue = data.substring(hcolonIndex + 1, headerEnd).trim(); + // If header-field is well-known, parse it. switch (headerName.toLowerCase()) { case 'via': case 'v': message.addHeader('via', headerValue); - if (message.getHeaders('via').length === 1) { parsed = message.parseHeader('Via'); - if (parsed) { message.via = parsed; message.via_branch = parsed.branch; @@ -17142,42 +14375,32 @@ function parseHeader(message, data, headerStart, headerEnd) { } else { parsed = 0; } - break; - case 'from': case 'f': message.setHeader('from', headerValue); parsed = message.parseHeader('from'); - if (parsed) { message.from = parsed; message.from_tag = parsed.getParam('tag'); } - break; - case 'to': case 't': message.setHeader('to', headerValue); parsed = message.parseHeader('to'); - if (parsed) { message.to = parsed; message.to_tag = parsed.getParam('tag'); } - break; - case 'record-route': parsed = Grammar.parse(headerValue, 'Record_Route'); - if (parsed === -1) { parsed = undefined; } else { var _iterator = _createForOfIteratorHelper(parsed), - _step; - + _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var header = _step.value; @@ -17190,30 +14413,23 @@ function parseHeader(message, data, headerStart, headerEnd) { _iterator.f(); } } - break; - case 'call-id': case 'i': message.setHeader('call-id', headerValue); parsed = message.parseHeader('call-id'); - if (parsed) { message.call_id = headerValue; } - break; - case 'contact': case 'm': parsed = Grammar.parse(headerValue, 'Contact'); - if (parsed === -1) { parsed = undefined; } else { var _iterator2 = _createForOfIteratorHelper(parsed), - _step2; - + _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var _header = _step2.value; @@ -17226,100 +14442,76 @@ function parseHeader(message, data, headerStart, headerEnd) { _iterator2.f(); } } - break; - case 'content-length': case 'l': message.setHeader('content-length', headerValue); parsed = message.parseHeader('content-length'); break; - case 'content-type': case 'c': message.setHeader('content-type', headerValue); parsed = message.parseHeader('content-type'); break; - case 'cseq': message.setHeader('cseq', headerValue); parsed = message.parseHeader('cseq'); - if (parsed) { message.cseq = parsed.value; } - if (message instanceof SIPMessage.IncomingResponse) { message.method = parsed.method; } - break; - case 'max-forwards': message.setHeader('max-forwards', headerValue); parsed = message.parseHeader('max-forwards'); break; - case 'www-authenticate': message.setHeader('www-authenticate', headerValue); parsed = message.parseHeader('www-authenticate'); break; - case 'proxy-authenticate': message.setHeader('proxy-authenticate', headerValue); parsed = message.parseHeader('proxy-authenticate'); break; - case 'session-expires': case 'x': message.setHeader('session-expires', headerValue); parsed = message.parseHeader('session-expires'); - if (parsed) { message.session_expires = parsed.expires; message.session_expires_refresher = parsed.refresher; } - break; - case 'refer-to': case 'r': message.setHeader('refer-to', headerValue); parsed = message.parseHeader('refer-to'); - if (parsed) { message.refer_to = parsed; } - break; - case 'replaces': message.setHeader('replaces', headerValue); parsed = message.parseHeader('replaces'); - if (parsed) { message.replaces = parsed; } - break; - case 'event': case 'o': message.setHeader('event', headerValue); parsed = message.parseHeader('event'); - if (parsed) { message.event = parsed; } - break; - default: // Do not parse this header. message.addHeader(headerName, headerValue); parsed = 0; } - if (parsed === undefined) { return { error: "error parsing header \"".concat(headerName, "\"") @@ -17331,67 +14523,40 @@ function parseHeader(message, data, headerStart, headerEnd) { },{"./Grammar":7,"./Logger":9,"./SIPMessage":21}],14:[function(require,module,exports){ "use strict"; -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - -function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } - -function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } - -function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } - -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } - -function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } - -function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - -function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - -function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } - -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; } +function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } +function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } /* globals RTCPeerConnection: false, RTCSessionDescription: false */ -var EventEmitter = require('events').EventEmitter; +var EventEmitter = require('events').EventEmitter; var sdp_transform = require('sdp-transform'); - var Logger = require('./Logger'); - var JsSIP_C = require('./Constants'); - var Exceptions = require('./Exceptions'); - var Transactions = require('./Transactions'); - var Utils = require('./Utils'); - var Timers = require('./Timers'); - var SIPMessage = require('./SIPMessage'); - var Dialog = require('./Dialog'); - var RequestSender = require('./RequestSender'); - var RTCSession_DTMF = require('./RTCSession/DTMF'); - var RTCSession_Info = require('./RTCSession/Info'); - var RTCSession_ReferNotifier = require('./RTCSession/ReferNotifier'); - var RTCSession_ReferSubscriber = require('./RTCSession/ReferSubscriber'); - var URI = require('./URI'); - var logger = new Logger('RTCSession'); var C = { // RTCSession states. @@ -17406,35 +14571,17 @@ var C = { STATUS_TERMINATED: 8, STATUS_CONFIRMED: 9 }; + /** * Local variables. */ - var holdMediaTypes = ['audio', 'video']; - module.exports = /*#__PURE__*/function (_EventEmitter) { - _inherits(RTCSession, _EventEmitter); - - var _super = _createSuper(RTCSession); - - _createClass(RTCSession, null, [{ - key: "C", - - /** - * Expose C object. - */ - get: function get() { - return C; - } - }]); - function RTCSession(ua) { var _this; - _classCallCheck(this, RTCSession); - logger.debug('new'); - _this = _super.call(this); + _this = _callSuper(this, RTCSession); _this._id = null; _this._ua = ua; _this._status = C.STATUS_NULL; @@ -17442,50 +14589,64 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { _this._earlyDialogs = {}; _this._contact = null; _this._from_tag = null; - _this._to_tag = null; // The RTCPeerConnection instance (public attribute). + _this._to_tag = null; - _this._connection = null; // Prevent races on serial PeerConnction operations. + // The RTCPeerConnection instance (public attribute). + _this._connection = null; - _this._connectionPromiseQueue = Promise.resolve(); // Incoming/Outgoing request being currently processed. + // Prevent races on serial PeerConnction operations. + _this._connectionPromiseQueue = Promise.resolve(); - _this._request = null; // Cancel state for initial outgoing request. + // Incoming/Outgoing request being currently processed. + _this._request = null; + // Cancel state for initial outgoing request. _this._is_canceled = false; - _this._cancel_reason = ''; // RTCSession confirmation flag. + _this._cancel_reason = ''; - _this._is_confirmed = false; // Is late SDP being negotiated. + // RTCSession confirmation flag. + _this._is_confirmed = false; - _this._late_sdp = false; // Default rtcOfferConstraints and rtcAnswerConstrainsts (passed in connect() or answer()). + // Is late SDP being negotiated. + _this._late_sdp = false; + // Default rtcOfferConstraints and rtcAnswerConstrainsts (passed in connect() or answer()). _this._rtcOfferConstraints = null; - _this._rtcAnswerConstraints = null; // Local MediaStream. + _this._rtcAnswerConstraints = null; + // Local MediaStream. _this._localMediaStream = null; - _this._localMediaStreamLocallyGenerated = false; // Flag to indicate PeerConnection ready for new actions. + _this._localMediaStreamLocallyGenerated = false; - _this._rtcReady = true; // Flag to indicate ICE candidate gathering is finished even if iceGatheringState is not yet 'complete'. + // Flag to indicate PeerConnection ready for new actions. + _this._rtcReady = true; - _this._iceReady = false; // SIP Timers. + // Flag to indicate ICE candidate gathering is finished even if iceGatheringState is not yet 'complete'. + _this._iceReady = false; + // SIP Timers. _this._timers = { ackTimer: null, expiresTimer: null, invite2xxTimer: null, userNoAnswerTimer: null - }; // Session info. + }; + // Session info. _this._direction = null; _this._local_identity = null; _this._remote_identity = null; _this._start_time = null; _this._end_time = null; - _this._tones = null; // Mute/Hold state. + _this._tones = null; + // Mute/Hold state. _this._audioMuted = false; _this._videoMuted = false; _this._localHold = false; - _this._remoteHold = false; // Session Timers (RFC 4028). + _this._remoteHold = false; + // Session Timers (RFC 4028). _this._sessionTimers = { enabled: _this._ua.configuration.session_timers, refreshMethod: _this._ua.configuration.session_timers_refresh_method, @@ -17494,21 +14655,88 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { running: false, refresher: false, timer: null // A setTimeout. + }; - }; // Map of ReferSubscriber instances indexed by the REFER's CSeq number. - - _this._referSubscribers = {}; // Custom session empty object for high level use. + // Map of ReferSubscriber instances indexed by the REFER's CSeq number. + _this._referSubscribers = {}; + // Custom session empty object for high level use. _this._data = {}; return _this; } + /** * User API */ - // Expose RTCSession constants as a property of the RTCSession instance. + // Expose RTCSession constants as a property of the RTCSession instance. + _inherits(RTCSession, _EventEmitter); + return _createClass(RTCSession, [{ + key: "C", + get: function get() { + return C; + } - _createClass(RTCSession, [{ + // Expose session failed/ended causes as a property of the RTCSession instance. + }, { + key: "causes", + get: function get() { + return JsSIP_C.causes; + } + }, { + key: "id", + get: function get() { + return this._id; + } + }, { + key: "connection", + get: function get() { + return this._connection; + } + }, { + key: "contact", + get: function get() { + return this._contact; + } + }, { + key: "direction", + get: function get() { + return this._direction; + } + }, { + key: "local_identity", + get: function get() { + return this._local_identity; + } + }, { + key: "remote_identity", + get: function get() { + return this._remote_identity; + } + }, { + key: "start_time", + get: function get() { + return this._start_time; + } + }, { + key: "end_time", + get: function get() { + return this._end_time; + } + }, { + key: "data", + get: function get() { + return this._data; + }, + set: function set(_data) { + this._data = _data; + } + }, { + key: "status", + get: function get() { + return this._status; + } + }, { key: "isInProgress", value: function isInProgress() { switch (this._status) { @@ -17518,7 +14746,6 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { case C.STATUS_INVITE_RECEIVED: case C.STATUS_WAITING_FOR_ANSWER: return true; - default: return false; } @@ -17531,7 +14758,6 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { case C.STATUS_WAITING_FOR_ACK: case C.STATUS_CONFIRMED: return true; - default: return false; } @@ -17543,7 +14769,6 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { case C.STATUS_CANCELED: case C.STATUS_TERMINATED: return true; - default: return false; } @@ -17585,30 +14810,30 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { var rtcOfferConstraints = options.rtcOfferConstraints || null; this._rtcOfferConstraints = rtcOfferConstraints; this._rtcAnswerConstraints = options.rtcAnswerConstraints || null; - this._data = options.data || this._data; // Check target. + this._data = options.data || this._data; + // Check target. if (target === undefined) { throw new TypeError('Not enough arguments'); - } // Check Session Status. - + } + // Check Session Status. if (this._status !== C.STATUS_NULL) { throw new Exceptions.InvalidStateError(this._status); - } // Check WebRTC support. - + } + // Check WebRTC support. if (!window.RTCPeerConnection) { throw new Exceptions.NotSupportedError('WebRTC not supported'); - } // Check target validity. - + } + // Check target validity. target = this._ua.normalizeTarget(target); - if (!target) { throw new TypeError("Invalid target: ".concat(originalTarget)); - } // Session Timers. - + } + // Session Timers. if (this._sessionTimers.enabled) { if (Utils.isDecimal(options.sessionTimersExpires)) { if (options.sessionTimersExpires >= JsSIP_C.MIN_SESSION_EXPIRES) { @@ -17617,18 +14842,19 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { this._sessionTimers.defaultExpires = JsSIP_C.SESSION_EXPIRES; } } - } // Set event handlers. - + } + // Set event handlers. for (var event in eventHandlers) { if (Object.prototype.hasOwnProperty.call(eventHandlers, event)) { this.on(event, eventHandlers[event]); } - } // Session parameter initialization. - + } - this._from_tag = Utils.newTag(); // Set anonymous property. + // Session parameter initialization. + this._from_tag = Utils.newTag(); + // Set anonymous property. var anonymous = options.anonymous || false; var requestParams = { from_tag: this._from_tag @@ -17637,7 +14863,6 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { anonymous: anonymous, outbound: true }); - if (anonymous) { requestParams.from_display_name = 'Anonymous'; requestParams.from_uri = new URI('sip', 'anonymous', 'anonymous.invalid'); @@ -17647,131 +14872,126 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { requestParams.from_uri = new URI('sip', options.fromUserName, this._ua.configuration.uri.host); extraHeaders.push("P-Preferred-Identity: ".concat(this._ua.configuration.uri.toString())); } - if (options.fromDisplayName) { requestParams.from_display_name = options.fromDisplayName; } - extraHeaders.push("Contact: ".concat(this._contact)); extraHeaders.push('Content-Type: application/sdp'); - if (this._sessionTimers.enabled) { extraHeaders.push("Session-Expires: ".concat(this._sessionTimers.defaultExpires).concat(this._ua.configuration.session_timers_force_refresher ? ';refresher=uac' : '')); } - this._request = new SIPMessage.InitialOutgoingInviteRequest(target, this._ua, requestParams, extraHeaders); - this._id = this._request.call_id + this._from_tag; // Create a new RTCPeerConnection instance. - - this._createRTCConnection(pcConfig, rtcConstraints); // Set internal properties. + this._id = this._request.call_id + this._from_tag; + // Create a new RTCPeerConnection instance. + this._createRTCConnection(pcConfig, rtcConstraints); + // Set internal properties. this._direction = 'outgoing'; this._local_identity = this._request.from; - this._remote_identity = this._request.to; // User explicitly provided a newRTCSession callback for this session. + this._remote_identity = this._request.to; + // User explicitly provided a newRTCSession callback for this session. if (initCallback) { initCallback(this); } - this._newRTCSession('local', this._request); - this._sendInitialRequest(mediaConstraints, rtcOfferConstraints, mediaStream); } }, { key: "init_incoming", value: function init_incoming(request, initCallback) { var _this2 = this; - logger.debug('init_incoming()'); var expires; - var contentType = request.hasHeader('Content-Type') ? request.getHeader('Content-Type').toLowerCase() : undefined; // Check body and content type. + var contentType = request.hasHeader('Content-Type') ? request.getHeader('Content-Type').toLowerCase() : undefined; + // Check body and content type. if (request.body && contentType !== 'application/sdp') { request.reply(415); return; - } // Session parameter initialization. - + } + // Session parameter initialization. this._status = C.STATUS_INVITE_RECEIVED; this._from_tag = request.from_tag; this._id = request.call_id + this._from_tag; this._request = request; - this._contact = this._ua.contact.toString(); // Get the Expires header value if exists. + this._contact = this._ua.contact.toString(); + // Get the Expires header value if exists. if (request.hasHeader('expires')) { expires = request.getHeader('expires') * 1000; } + /* Set the to_tag before * replying a response code that will create a dialog. */ + request.to_tag = Utils.newTag(); - - request.to_tag = Utils.newTag(); // An error on dialog creation will fire 'failed' event. - + // An error on dialog creation will fire 'failed' event. if (!this._createDialog(request, 'UAS', true)) { request.reply(500, 'Missing Contact header field'); return; } - if (request.body) { this._late_sdp = false; } else { this._late_sdp = true; } + this._status = C.STATUS_WAITING_FOR_ANSWER; - this._status = C.STATUS_WAITING_FOR_ANSWER; // Set userNoAnswerTimer. - + // Set userNoAnswerTimer. this._timers.userNoAnswerTimer = setTimeout(function () { request.reply(408); - _this2._failed('local', null, JsSIP_C.causes.NO_ANSWER); }, this._ua.configuration.no_answer_timeout); + /* Set expiresTimer * RFC3261 13.3.1 */ - if (expires) { this._timers.expiresTimer = setTimeout(function () { if (_this2._status === C.STATUS_WAITING_FOR_ANSWER) { request.reply(487); - _this2._failed('system', null, JsSIP_C.causes.EXPIRES); } }, expires); - } // Set internal properties. - + } + // Set internal properties. this._direction = 'incoming'; this._local_identity = request.to; - this._remote_identity = request.from; // A init callback was specifically defined. + this._remote_identity = request.from; + // A init callback was specifically defined. if (initCallback) { initCallback(this); - } // Fire 'newRTCSession' event. - - - this._newRTCSession('remote', request); // The user may have rejected the call in the 'newRTCSession' event. + } + // Fire 'newRTCSession' event. + this._newRTCSession('remote', request); + // The user may have rejected the call in the 'newRTCSession' event. if (this._status === C.STATUS_TERMINATED) { return; - } // Reply 180. + } + // Reply 180. + request.reply(180, null, ["Contact: ".concat(this._contact)]); - request.reply(180, null, ["Contact: ".concat(this._contact)]); // Fire 'progress' event. + // Fire 'progress' event. // TODO: Document that 'response' field in 'progress' event is null for incoming calls. - this._progress('local', null); } + /** * Answer the call. */ - }, { key: "answer", value: function answer() { var _this3 = this; - var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; logger.debug('answer()'); var request = this._request; @@ -17791,18 +15011,19 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { var peerOffersFullVideo = false; this._rtcAnswerConstraints = rtcAnswerConstraints; this._rtcOfferConstraints = options.rtcOfferConstraints || null; - this._data = options.data || this._data; // Check Session Direction and Status. + this._data = options.data || this._data; + // Check Session Direction and Status. if (this._direction !== 'incoming') { throw new Exceptions.NotSupportedError('"answer" not supported for outgoing RTCSession'); - } // Check Session status. - + } + // Check Session status. if (this._status !== C.STATUS_WAITING_FOR_ANSWER) { throw new Exceptions.InvalidStateError(this._status); - } // Session Timers. - + } + // Session Timers. if (this._sessionTimers.enabled) { if (Utils.isDecimal(options.sessionTimersExpires)) { if (options.sessionTimersExpires >= JsSIP_C.MIN_SESSION_EXPIRES) { @@ -17812,60 +15033,54 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { } } } + this._status = C.STATUS_ANSWERED; - this._status = C.STATUS_ANSWERED; // An error on dialog creation will fire 'failed' event. - + // An error on dialog creation will fire 'failed' event. if (!this._createDialog(request, 'UAS')) { request.reply(500, 'Error creating dialog'); return; } - clearTimeout(this._timers.userNoAnswerTimer); - extraHeaders.unshift("Contact: ".concat(this._contact)); // Determine incoming media from incoming SDP offer (if any). + extraHeaders.unshift("Contact: ".concat(this._contact)); - var sdp = request.parseSDP(); // Make sure sdp.media is an array, not the case if there is only one media. + // Determine incoming media from incoming SDP offer (if any). + var sdp = request.parseSDP(); + // Make sure sdp.media is an array, not the case if there is only one media. if (!Array.isArray(sdp.media)) { sdp.media = [sdp.media]; - } // Go through all medias in SDP to find offered capabilities to answer with. - + } + // Go through all medias in SDP to find offered capabilities to answer with. var _iterator = _createForOfIteratorHelper(sdp.media), - _step; - + _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var m = _step.value; - if (m.type === 'audio') { peerHasAudioLine = true; - if (!m.direction || m.direction === 'sendrecv') { peerOffersFullAudio = true; } } - if (m.type === 'video') { peerHasVideoLine = true; - if (!m.direction || m.direction === 'sendrecv') { peerOffersFullVideo = true; } } - } // Remove audio from mediaStream if suggested by mediaConstraints. + } + // Remove audio from mediaStream if suggested by mediaConstraints. } catch (err) { _iterator.e(err); } finally { _iterator.f(); } - if (mediaStream && mediaConstraints.audio === false) { tracks = mediaStream.getAudioTracks(); - var _iterator2 = _createForOfIteratorHelper(tracks), - _step2; - + _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var track = _step2.value; @@ -17876,15 +15091,13 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { } finally { _iterator2.f(); } - } // Remove video from mediaStream if suggested by mediaConstraints. - + } + // Remove video from mediaStream if suggested by mediaConstraints. if (mediaStream && mediaConstraints.video === false) { tracks = mediaStream.getVideoTracks(); - var _iterator3 = _createForOfIteratorHelper(tracks), - _step3; - + _step3; try { for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { var _track = _step3.value; @@ -17895,84 +15108,85 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { } finally { _iterator3.f(); } - } // Set audio constraints based on incoming stream if not supplied. - + } + // Set audio constraints based on incoming stream if not supplied. if (!mediaStream && mediaConstraints.audio === undefined) { mediaConstraints.audio = peerOffersFullAudio; - } // Set video constraints based on incoming stream if not supplied. - + } + // Set video constraints based on incoming stream if not supplied. if (!mediaStream && mediaConstraints.video === undefined) { mediaConstraints.video = peerOffersFullVideo; - } // Don't ask for audio if the incoming offer has no audio section. - + } + // Don't ask for audio if the incoming offer has no audio section. if (!mediaStream && !peerHasAudioLine && !rtcOfferConstraints.offerToReceiveAudio) { mediaConstraints.audio = false; - } // Don't ask for video if the incoming offer has no video section. - + } + // Don't ask for video if the incoming offer has no video section. if (!mediaStream && !peerHasVideoLine && !rtcOfferConstraints.offerToReceiveVideo) { mediaConstraints.video = false; - } // Create a new RTCPeerConnection instance. - // TODO: This may throw an error, should react. - + } + // Create a new RTCPeerConnection instance. + // TODO: This may throw an error, should react. this._createRTCConnection(pcConfig, rtcConstraints); - - Promise.resolve() // Handle local MediaStream. + Promise.resolve() + // Handle local MediaStream. .then(function () { // A local MediaStream is given, use it. if (mediaStream) { return mediaStream; - } // Audio and/or video requested, prompt getUserMedia. - else if (mediaConstraints.audio || mediaConstraints.video) { - _this3._localMediaStreamLocallyGenerated = true; - return navigator.mediaDevices.getUserMedia(mediaConstraints)["catch"](function (error) { - if (_this3._status === C.STATUS_TERMINATED) { - throw new Error('terminated'); - } - - request.reply(480); - - _this3._failed('local', null, JsSIP_C.causes.USER_DENIED_MEDIA_ACCESS); - - logger.warn('emit "getusermediafailed" [error:%o]', error); - - _this3.emit('getusermediafailed', error); + } - throw new Error('getUserMedia() failed'); - }); - } - }) // Attach MediaStream to RTCPeerconnection. + // Audio and/or video requested, prompt getUserMedia. + else if (mediaConstraints.audio || mediaConstraints.video) { + if (!navigator.mediaDevices) { + var error = new Error('Media inaccessible; Secure context required (eg. https://, file://)'); + + //this._failed('local', null, JsSIP_C.causes.USER_DENIED_MEDIA_ACCESS); + //this.emit('getusermediafailed', error); + throw error; + } + _this3._localMediaStreamLocallyGenerated = true; + return navigator.mediaDevices.getUserMedia(mediaConstraints)["catch"](function (error) { + if (_this3._status === C.STATUS_TERMINATED) { + throw new Error('terminated'); + } + request.reply(480); + _this3._failed('local', null, JsSIP_C.causes.USER_DENIED_MEDIA_ACCESS); + logger.warn('emit "getusermediafailed" [error:%o]', error); + _this3.emit('getusermediafailed', error); + throw new Error('getUserMedia() failed'); + }); + } + }) + // Attach MediaStream to RTCPeerconnection. .then(function (stream) { if (_this3._status === C.STATUS_TERMINATED) { throw new Error('terminated'); } - _this3._localMediaStream = stream; - if (stream) { stream.getTracks().forEach(function (track) { _this3._connection.addTrack(track, stream); }); } - }) // Set remote description. + }) + // Set remote description. .then(function () { if (_this3._late_sdp) { return; } - var e = { originator: 'remote', type: 'offer', sdp: request.body }; logger.debug('emit "sdp"'); - _this3.emit('sdp', e); - var offer = new RTCSessionDescription({ type: 'offer', sdp: e.sdp @@ -17981,25 +15195,21 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { return _this3._connection.setRemoteDescription(offer); })["catch"](function (error) { request.reply(488); - _this3._failed('system', null, JsSIP_C.causes.WEBRTC_ERROR); - logger.warn('emit "peerconnection:setremotedescriptionfailed" [error:%o]', error); - _this3.emit('peerconnection:setremotedescriptionfailed', error); - throw new Error('peerconnection.setRemoteDescription() failed'); }); return _this3._connectionPromiseQueue; - }) // Create local description. + }) + // Create local description. .then(function () { if (_this3._status === C.STATUS_TERMINATED) { throw new Error('terminated'); - } // TODO: Is this event already useful? - + } + // TODO: Is this event already useful? _this3._connecting(request); - if (!_this3._late_sdp) { return _this3._createLocalDescription('answer', rtcAnswerConstraints)["catch"](function () { request.reply(500); @@ -18011,42 +15221,37 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { throw new Error('_createLocalDescription() failed'); }); } - }) // Send reply. + }) + // Send reply. .then(function (desc) { if (_this3._status === C.STATUS_TERMINATED) { throw new Error('terminated'); } - _this3._handleSessionTimersInIncomingRequest(request, extraHeaders); - request.reply(200, null, extraHeaders, desc, function () { _this3._status = C.STATUS_WAITING_FOR_ACK; - _this3._setInvite2xxTimer(request, desc); - _this3._setACKTimer(); - _this3._accepted('local'); }, function () { _this3._failed('system', null, JsSIP_C.causes.CONNECTION_ERROR); }); })["catch"](function (error) { + logger.warn("getUserMedia error: ".concat(JSON.stringify(error))); if (_this3._status === C.STATUS_TERMINATED) { return; } - - logger.warn(error); + throw error; }); } + /** * Terminate the call. */ - }, { key: "terminate", value: function terminate() { var _this4 = this; - var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; logger.debug('terminate()'); var cause = options.cause || JsSIP_C.causes.BYE; @@ -18054,118 +15259,103 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { var body = options.body; var cancel_reason; var status_code = options.status_code; - var reason_phrase = options.reason_phrase; // Check Session Status. + var reason_phrase = options.reason_phrase; + // Check Session Status. if (this._status === C.STATUS_TERMINATED) { throw new Exceptions.InvalidStateError(this._status); } - switch (this._status) { // - UAC - case C.STATUS_NULL: case C.STATUS_INVITE_SENT: case C.STATUS_1XX_RECEIVED: logger.debug('canceling session'); - if (status_code && (status_code < 200 || status_code >= 700)) { throw new TypeError("Invalid status_code: ".concat(status_code)); } else if (status_code) { reason_phrase = reason_phrase || JsSIP_C.REASON_PHRASE[status_code] || ''; cancel_reason = "SIP ;cause=".concat(status_code, " ;text=\"").concat(reason_phrase, "\""); - } // Check Session Status. - + } + // Check Session Status. if (this._status === C.STATUS_NULL || this._status === C.STATUS_INVITE_SENT) { this._is_canceled = true; this._cancel_reason = cancel_reason; } else if (this._status === C.STATUS_1XX_RECEIVED) { this._request.cancel(cancel_reason); } - this._status = C.STATUS_CANCELED; - this._failed('local', null, JsSIP_C.causes.CANCELED); - break; - // - UAS - + // - UAS - case C.STATUS_WAITING_FOR_ANSWER: case C.STATUS_ANSWERED: logger.debug('rejecting session'); status_code = status_code || 480; - if (status_code < 300 || status_code >= 700) { throw new TypeError("Invalid status_code: ".concat(status_code)); } - this._request.reply(status_code, reason_phrase, extraHeaders, body); - this._failed('local', null, JsSIP_C.causes.REJECTED); - break; - case C.STATUS_WAITING_FOR_ACK: case C.STATUS_CONFIRMED: logger.debug('terminating session'); reason_phrase = options.reason_phrase || JsSIP_C.REASON_PHRASE[status_code] || ''; - if (status_code && (status_code < 200 || status_code >= 700)) { throw new TypeError("Invalid status_code: ".concat(status_code)); } else if (status_code) { extraHeaders.push("Reason: SIP ;cause=".concat(status_code, "; text=\"").concat(reason_phrase, "\"")); } + /* RFC 3261 section 15 (Terminating a session): * * "...the callee's UA MUST NOT send a BYE on a confirmed dialog * until it has received an ACK for its 2xx response or until the server * transaction times out." */ - - if (this._status === C.STATUS_WAITING_FOR_ACK && this._direction === 'incoming' && this._request.server_transaction.state !== Transactions.C.STATUS_TERMINATED) { // Save the dialog for later restoration. - var dialog = this._dialog; // Send the BYE as soon as the ACK is received... + var dialog = this._dialog; + // Send the BYE as soon as the ACK is received... this.receiveRequest = function (_ref) { var method = _ref.method; - if (method === JsSIP_C.ACK) { _this4.sendRequest(JsSIP_C.BYE, { extraHeaders: extraHeaders, body: body }); - dialog.terminate(); } - }; // .., or when the INVITE transaction times out - + }; + // .., or when the INVITE transaction times out this._request.server_transaction.on('stateChanged', function () { if (_this4._request.server_transaction.state === Transactions.C.STATUS_TERMINATED) { _this4.sendRequest(JsSIP_C.BYE, { extraHeaders: extraHeaders, body: body }); - dialog.terminate(); } }); + this._ended('local', null, cause); - this._ended('local', null, cause); // Restore the dialog into 'this' in order to be able to send the in-dialog BYE :-). - - - this._dialog = dialog; // Restore the dialog into 'ua' so the ACK can reach 'this' session. + // Restore the dialog into 'this' in order to be able to send the in-dialog BYE :-). + this._dialog = dialog; + // Restore the dialog into 'ua' so the ACK can reach 'this' session. this._ua.newDialog(dialog); } else { this.sendRequest(JsSIP_C.BYE, { extraHeaders: extraHeaders, body: body }); - this._ended('local', null, cause); } - } } }, { @@ -18177,32 +15367,31 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { var duration = options.duration || null; var interToneGap = options.interToneGap || null; var transportType = options.transportType || JsSIP_C.DTMF_TRANSPORT.INFO; - if (tones === undefined) { throw new TypeError('Not enough arguments'); - } // Check Session Status. - + } + // Check Session Status. if (this._status !== C.STATUS_CONFIRMED && this._status !== C.STATUS_WAITING_FOR_ACK && this._status !== C.STATUS_1XX_RECEIVED) { throw new Exceptions.InvalidStateError(this._status); - } // Check Transport type. - + } + // Check Transport type. if (transportType !== JsSIP_C.DTMF_TRANSPORT.INFO && transportType !== JsSIP_C.DTMF_TRANSPORT.RFC2833) { throw new TypeError("invalid transportType: ".concat(transportType)); - } // Convert to string. - + } + // Convert to string. if (typeof tones === 'number') { tones = tones.toString(); - } // Check tones. - + } + // Check tones. if (!tones || typeof tones !== 'string' || !tones.match(/^[0-9A-DR#*,]+$/i)) { throw new TypeError("Invalid tones: ".concat(tones)); - } // Check duration. - + } + // Check duration. if (duration && !Utils.isDecimal(duration)) { throw new TypeError("Invalid tone duration: ".concat(duration)); } else if (!duration) { @@ -18216,9 +15405,9 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { } else { duration = Math.abs(duration); } + options.duration = duration; - options.duration = duration; // Check interToneGap. - + // Check interToneGap. if (interToneGap && !Utils.isDecimal(interToneGap)) { throw new TypeError("Invalid interToneGap: ".concat(interToneGap)); } else if (!interToneGap) { @@ -18228,47 +15417,39 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { interToneGap = RTCSession_DTMF.C.MIN_INTER_TONE_GAP; } else { interToneGap = Math.abs(interToneGap); - } // RFC2833. Let RTCDTMFSender enqueue the DTMFs. - + } + // RFC2833. Let RTCDTMFSender enqueue the DTMFs. if (transportType === JsSIP_C.DTMF_TRANSPORT.RFC2833) { // Send DTMF in current audio RTP stream. var sender = this._getDTMFRTPSender(); - if (sender) { // Add remaining buffered tones. - tones = sender.toneBuffer + tones; // Insert tones. - + tones = sender.toneBuffer + tones; + // Insert tones. sender.insertDTMF(tones, duration, interToneGap); } - return; } - if (this._tones) { // Tones are already queued, just add to the queue. this._tones += tones; return; } + this._tones = tones; - this._tones = tones; // Send the first tone. - + // Send the first tone. _sendDTMF.call(this); - function _sendDTMF() { var _this5 = this; - var timeout; - if (this._status === C.STATUS_TERMINATED || !this._tones || position >= this._tones.length) { // Stop sending DTMF. this._tones = null; return; } - var tone = this._tones[position]; position += 1; - if (tone === ',') { timeout = 2000; } else { @@ -18281,9 +15462,9 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { }; dtmf.send(tone, options); timeout = duration + interToneGap; - } // Set timeout for the next tone. - + } + // Set timeout for the next tone. setTimeout(_sendDTMF.bind(this), timeout); } } @@ -18291,19 +15472,19 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { key: "sendInfo", value: function sendInfo(contentType, body) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - logger.debug('sendInfo()'); // Check Session Status. + logger.debug('sendInfo()'); + // Check Session Status. if (this._status !== C.STATUS_CONFIRMED && this._status !== C.STATUS_WAITING_FOR_ACK && this._status !== C.STATUS_1XX_RECEIVED) { throw new Exceptions.InvalidStateError(this._status); } - var info = new RTCSession_Info(this); info.send(contentType, body, options); } + /** * Mute */ - }, { key: "mute", value: function mute() { @@ -18313,22 +15494,17 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { }; logger.debug('mute()'); var audioMuted = false, - videoMuted = false; - + videoMuted = false; if (this._audioMuted === false && options.audio) { audioMuted = true; this._audioMuted = true; - this._toggleMuteAudio(true); } - if (this._videoMuted === false && options.video) { videoMuted = true; this._videoMuted = true; - this._toggleMuteVideo(true); } - if (audioMuted === true || videoMuted === true) { this._onmute({ audio: audioMuted, @@ -18336,10 +15512,10 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { }); } } + /** * Unmute */ - }, { key: "unmute", value: function unmute() { @@ -18349,26 +15525,21 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { }; logger.debug('unmute()'); var audioUnMuted = false, - videoUnMuted = false; - + videoUnMuted = false; if (this._audioMuted === true && options.audio) { audioUnMuted = true; this._audioMuted = false; - if (this._localHold === false) { this._toggleMuteAudio(false); } } - if (this._videoMuted === true && options.video) { videoUnMuted = true; this._videoMuted = false; - if (this._localHold === false) { this._toggleMuteVideo(false); } } - if (audioUnMuted === true || videoUnMuted === true) { this._onunmute({ audio: audioUnMuted, @@ -18376,35 +15547,28 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { }); } } + /** * Hold */ - }, { key: "hold", value: function hold() { var _this6 = this; - var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var done = arguments.length > 1 ? arguments[1] : undefined; logger.debug('hold()'); - if (this._status !== C.STATUS_WAITING_FOR_ACK && this._status !== C.STATUS_CONFIRMED) { return false; } - if (this._localHold === true) { return false; } - if (!this._isReadyToReOffer()) { return false; } - this._localHold = true; - this._onhold('local'); - var eventHandlers = { succeeded: function succeeded() { if (done) { @@ -18419,7 +15583,6 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { }); } }; - if (options.useUpdate) { this._sendUpdate({ sdpOffer: true, @@ -18432,34 +15595,26 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { extraHeaders: options.extraHeaders }); } - return true; } }, { key: "unhold", value: function unhold() { var _this7 = this; - var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var done = arguments.length > 1 ? arguments[1] : undefined; logger.debug('unhold()'); - if (this._status !== C.STATUS_WAITING_FOR_ACK && this._status !== C.STATUS_CONFIRMED) { return false; } - if (this._localHold === false) { return false; } - if (!this._isReadyToReOffer()) { return false; } - this._localHold = false; - this._onunhold('local'); - var eventHandlers = { succeeded: function succeeded() { if (done) { @@ -18474,7 +15629,6 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { }); } }; - if (options.useUpdate) { this._sendUpdate({ sdpOffer: true, @@ -18487,27 +15641,22 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { extraHeaders: options.extraHeaders }); } - return true; } }, { key: "renegotiate", value: function renegotiate() { var _this8 = this; - var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var done = arguments.length > 1 ? arguments[1] : undefined; logger.debug('renegotiate()'); var rtcOfferConstraints = options.rtcOfferConstraints || null; - if (this._status !== C.STATUS_WAITING_FOR_ACK && this._status !== C.STATUS_CONFIRMED) { return false; } - if (!this._isReadyToReOffer()) { return false; } - var eventHandlers = { succeeded: function succeeded() { if (done) { @@ -18522,9 +15671,7 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { }); } }; - this._setLocalMediaStatus(); - if (options.useUpdate) { this._sendUpdate({ sdpOffer: true, @@ -18539,38 +15686,35 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { extraHeaders: options.extraHeaders }); } - return true; } + /** * Refer */ - }, { key: "refer", value: function refer(target, options) { var _this9 = this; - logger.debug('refer()'); var originalTarget = target; - if (this._status !== C.STATUS_WAITING_FOR_ACK && this._status !== C.STATUS_CONFIRMED) { return false; - } // Check target validity. - + } + // Check target validity. target = this._ua.normalizeTarget(target); - if (!target) { throw new TypeError("Invalid target: ".concat(originalTarget)); } - var referSubscriber = new RTCSession_ReferSubscriber(this); - referSubscriber.sendRefer(target, options); // Store in the map. + referSubscriber.sendRefer(target, options); + // Store in the map. var id = referSubscriber.id; - this._referSubscribers[id] = referSubscriber; // Listen for ending events so we can remove it from the map. + this._referSubscribers[id] = referSubscriber; + // Listen for ending events so we can remove it from the map. referSubscriber.on('requestFailed', function () { delete _this9._referSubscribers[id]; }); @@ -18582,27 +15726,25 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { }); return referSubscriber; } + /** * Send a generic in-dialog Request */ - }, { key: "sendRequest", value: function sendRequest(method, options) { logger.debug('sendRequest()'); return this._dialog.sendRequest(method, options); } + /** * In dialog Request Reception */ - }, { key: "receiveRequest", value: function receiveRequest(request) { var _this10 = this; - logger.debug('receiveRequest()'); - if (request.method === JsSIP_C.CANCEL) { /* RFC3261 15 States that a UAS may have accepted an invitation while a CANCEL * was in progress and that the UAC MAY continue with the session established by @@ -18617,9 +15759,7 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { */ if (this._status === C.STATUS_WAITING_FOR_ANSWER || this._status === C.STATUS_ANSWERED) { this._status = C.STATUS_CANCELED; - this._request.reply(487); - this._failed('remote', request, JsSIP_C.causes.CANCELED); } } else { @@ -18628,13 +15768,12 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { case JsSIP_C.ACK: if (this._status !== C.STATUS_WAITING_FOR_ACK) { return; - } // Update signaling status. - + } + // Update signaling status. this._status = C.STATUS_CONFIRMED; clearTimeout(this._timers.ackTimer); clearTimeout(this._timers.invite2xxTimer); - if (this._late_sdp) { if (!request.body) { this.terminate({ @@ -18643,7 +15782,6 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { }); break; } - var e = { originator: 'remote', type: 'answer', @@ -18666,34 +15804,25 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { cause: JsSIP_C.causes.BAD_MEDIA_DESCRIPTION, status_code: 488 }); - logger.warn('emit "peerconnection:setremotedescriptionfailed" [error:%o]', error); - _this10.emit('peerconnection:setremotedescriptionfailed', error); }); } else if (!this._is_confirmed) { this._confirmed('remote', request); } - break; - case JsSIP_C.BYE: if (this._status === C.STATUS_CONFIRMED || this._status === C.STATUS_WAITING_FOR_ACK) { request.reply(200); - this._ended('remote', request, JsSIP_C.causes.BYE); } else if (this._status === C.STATUS_INVITE_RECEIVED || this._status === C.STATUS_WAITING_FOR_ANSWER) { request.reply(200); - this._request.reply(487, 'BYE Received'); - this._ended('remote', request, JsSIP_C.causes.BYE); } else { request.reply(403, 'Wrong Status'); } - break; - case JsSIP_C.INVITE: if (this._status === C.STATUS_CONFIRMED) { if (request.hasHeader('replaces')) { @@ -18704,13 +15833,10 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { } else { request.reply(403, 'Wrong Status'); } - break; - case JsSIP_C.INFO: if (this._status === C.STATUS_1XX_RECEIVED || this._status === C.STATUS_WAITING_FOR_ANSWER || this._status === C.STATUS_ANSWERED || this._status === C.STATUS_WAITING_FOR_ACK || this._status === C.STATUS_CONFIRMED) { var contentType = request.hasHeader('Content-Type') ? request.getHeader('Content-Type').toLowerCase() : undefined; - if (contentType && contentType.match(/^application\/dtmf-relay/i)) { new RTCSession_DTMF(this).init_incoming(request); } else if (contentType !== undefined) { @@ -18721,50 +15847,41 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { } else { request.reply(403, 'Wrong Status'); } - break; - case JsSIP_C.UPDATE: if (this._status === C.STATUS_CONFIRMED) { this._receiveUpdate(request); } else { request.reply(403, 'Wrong Status'); } - break; - case JsSIP_C.REFER: if (this._status === C.STATUS_CONFIRMED) { this._receiveRefer(request); } else { request.reply(403, 'Wrong Status'); } - break; - case JsSIP_C.NOTIFY: if (this._status === C.STATUS_CONFIRMED) { this._receiveNotify(request); } else { request.reply(403, 'Wrong Status'); } - break; - default: request.reply(501); } } } + /** * Session Callbacks */ - }, { key: "onTransportError", value: function onTransportError() { logger.warn('onTransportError()'); - if (this._status !== C.STATUS_TERMINATED) { this.terminate({ status_code: 500, @@ -18777,7 +15894,6 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { key: "onRequestTimeout", value: function onRequestTimeout() { logger.warn('onRequestTimeout()'); - if (this._status !== C.STATUS_TERMINATED) { this.terminate({ status_code: 408, @@ -18790,7 +15906,6 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { key: "onDialogError", value: function onDialogError() { logger.warn('onDialogError()'); - if (this._status !== C.STATUS_TERMINATED) { this.terminate({ status_code: 500, @@ -18798,106 +15913,107 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { cause: JsSIP_C.causes.DIALOG_ERROR }); } - } // Called from DTMF handler. + } + // Called from DTMF handler. }, { key: "newDTMF", value: function newDTMF(data) { logger.debug('newDTMF()'); this.emit('newDTMF', data); - } // Called from Info handler. + } + // Called from Info handler. }, { key: "newInfo", value: function newInfo(data) { logger.debug('newInfo()'); this.emit('newInfo', data); } + /** * Check if RTCSession is ready for an outgoing re-INVITE or UPDATE with SDP. */ - }, { key: "_isReadyToReOffer", value: function _isReadyToReOffer() { if (!this._rtcReady) { logger.debug('_isReadyToReOffer() | internal WebRTC status not ready'); return false; - } // No established yet. - + } + // No established yet. if (!this._dialog) { logger.debug('_isReadyToReOffer() | session not established yet'); return false; - } // Another INVITE transaction is in progress. - + } + // Another INVITE transaction is in progress. if (this._dialog.uac_pending_reply === true || this._dialog.uas_pending_reply === true) { logger.debug('_isReadyToReOffer() | there is another INVITE/UPDATE transaction in progress'); return false; } - return true; } }, { key: "_close", value: function _close() { - logger.debug('close()'); // Close local MediaStream if it was not given by the user. + logger.debug('close()'); + // Close local MediaStream if it was not given by the user. if (this._localMediaStream && this._localMediaStreamLocallyGenerated) { logger.debug('close() | closing local MediaStream'); Utils.closeMediaStream(this._localMediaStream); } - if (this._status === C.STATUS_TERMINATED) { return; } + this._status = C.STATUS_TERMINATED; - this._status = C.STATUS_TERMINATED; // Terminate RTC. - + // Terminate RTC. if (this._connection) { try { this._connection.close(); } catch (error) { logger.warn('close() | error closing the RTCPeerConnection: %o', error); } - } // Terminate signaling. - // Clear SIP timers. + } + // Terminate signaling. + // Clear SIP timers. for (var timer in this._timers) { if (Object.prototype.hasOwnProperty.call(this._timers, timer)) { clearTimeout(this._timers[timer]); } - } // Clear Session Timers. - + } - clearTimeout(this._sessionTimers.timer); // Terminate confirmed dialog. + // Clear Session Timers. + clearTimeout(this._sessionTimers.timer); + // Terminate confirmed dialog. if (this._dialog) { this._dialog.terminate(); - delete this._dialog; - } // Terminate early dialogs. - + } + // Terminate early dialogs. for (var dialog in this._earlyDialogs) { if (Object.prototype.hasOwnProperty.call(this._earlyDialogs, dialog)) { this._earlyDialogs[dialog].terminate(); - delete this._earlyDialogs[dialog]; } - } // Terminate REFER subscribers. - + } + // Terminate REFER subscribers. for (var subscriber in this._referSubscribers) { if (Object.prototype.hasOwnProperty.call(this._referSubscribers, subscriber)) { delete this._referSubscribers[subscriber]; } } - this._ua.destroyRTCSession(this); } + /** * Private API. */ @@ -18907,50 +16023,40 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { * Response retransmissions cannot be accomplished by transaction layer * since it is destroyed when receiving the first 2xx answer */ - }, { key: "_setInvite2xxTimer", value: function _setInvite2xxTimer(request, body) { var timeout = Timers.T1; - function invite2xxRetransmission() { if (this._status !== C.STATUS_WAITING_FOR_ACK) { return; } - request.reply(200, null, ["Contact: ".concat(this._contact)], body); - if (timeout < Timers.T2) { timeout = timeout * 2; - if (timeout > Timers.T2) { timeout = Timers.T2; } } - this._timers.invite2xxTimer = setTimeout(invite2xxRetransmission.bind(this), timeout); } - this._timers.invite2xxTimer = setTimeout(invite2xxRetransmission.bind(this), timeout); } + /** * RFC3261 14.2 * If a UAS generates a 2xx response and never receives an ACK, * it SHOULD generate a BYE to terminate the dialog. */ - }, { key: "_setACKTimer", value: function _setACKTimer() { var _this11 = this; - this._timers.ackTimer = setTimeout(function () { if (_this11._status === C.STATUS_WAITING_FOR_ACK) { logger.debug('no ACK received, terminating the session'); clearTimeout(_this11._timers.invite2xxTimer); - _this11.sendRequest(JsSIP_C.BYE); - _this11._ended('remote', null, JsSIP_C.causes.NO_ACK); } }, Timers.TIMER_H); @@ -18959,12 +16065,11 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { key: "_createRTCConnection", value: function _createRTCConnection(pcConfig, rtcConstraints) { var _this12 = this; - this._connection = new RTCPeerConnection(pcConfig, rtcConstraints); - this._connection.addEventListener('iceconnectionstatechange', function () { - var state = _this12._connection.iceConnectionState; // TODO: Do more with different states. + var state = _this12._connection.iceConnectionState; + // TODO: Do more with different states. if (state === 'failed') { _this12.terminate({ cause: JsSIP_C.causes.RTP_TIMEOUT, @@ -18973,7 +16078,6 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { }); } }); - logger.debug('emit "peerconnection"'); this.emit('peerconnection', { peerconnection: this._connection @@ -18983,50 +16087,43 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { key: "_createLocalDescription", value: function _createLocalDescription(type, constraints) { var _this13 = this; - logger.debug('createLocalDescription()'); if (type !== 'offer' && type !== 'answer') throw new Error("createLocalDescription() | invalid type \"".concat(type, "\"")); var connection = this._connection; this._rtcReady = false; - return Promise.resolve() // Create Offer or Answer. + return Promise.resolve() + // Create Offer or Answer. .then(function () { if (type === 'offer') { return connection.createOffer(constraints)["catch"](function (error) { logger.warn('emit "peerconnection:createofferfailed" [error:%o]', error); - _this13.emit('peerconnection:createofferfailed', error); - return Promise.reject(error); }); } else { return connection.createAnswer(constraints)["catch"](function (error) { logger.warn('emit "peerconnection:createanswerfailed" [error:%o]', error); - _this13.emit('peerconnection:createanswerfailed', error); - return Promise.reject(error); }); } - }) // Set local description. + }) + // Set local description. .then(function (desc) { return connection.setLocalDescription(desc)["catch"](function (error) { _this13._rtcReady = true; logger.warn('emit "peerconnection:setlocaldescriptionfailed" [error:%o]', error); - _this13.emit('peerconnection:setlocaldescriptionfailed', error); - return Promise.reject(error); }); }).then(function () { // Resolve right away if 'pc.iceGatheringState' is 'complete'. - /** * Resolve right away if: * - 'connection.iceGatheringState' is 'complete' and no 'iceRestart' constraint is set. * - 'connection.iceGatheringState' is 'gathering' and 'iceReady' is true. */ var iceRestart = constraints && constraints.iceRestart; - if (connection.iceGatheringState === 'complete' && !iceRestart || connection.iceGatheringState === 'gathering' && _this13._iceReady) { _this13._rtcReady = true; var e = { @@ -19035,29 +16132,26 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { sdp: connection.localDescription.sdp }; logger.debug('emit "sdp"'); - _this13.emit('sdp', e); - return Promise.resolve(e.sdp); - } // Add 'pc.onicencandidate' event handler to resolve on last candidate. - + } + // Add 'pc.onicencandidate' event handler to resolve on last candidate. return new Promise(function (resolve) { var finished = false; var iceCandidateListener; var iceGatheringStateListener; _this13._iceReady = false; - var ready = function ready() { if (finished) { return; } - connection.removeEventListener('icecandidate', iceCandidateListener); connection.removeEventListener('icegatheringstatechange', iceGatheringStateListener); finished = true; - _this13._rtcReady = true; // connection.iceGatheringState will still indicate 'gathering' and thus be blocking. + _this13._rtcReady = true; + // connection.iceGatheringState will still indicate 'gathering' and thus be blocking. _this13._iceReady = true; var e = { originator: 'local', @@ -19065,15 +16159,11 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { sdp: connection.localDescription.sdp }; logger.debug('emit "sdp"'); - _this13.emit('sdp', e); - resolve(e.sdp); }; - connection.addEventListener('icecandidate', iceCandidateListener = function iceCandidateListener(event) { var candidate = event.candidate; - if (candidate) { _this13.emit('icecandidate', { candidate: candidate, @@ -19091,71 +16181,70 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { }); }); } + /** * Dialog Management */ - }, { key: "_createDialog", value: function _createDialog(message, type, early) { var local_tag = type === 'UAS' ? message.to_tag : message.from_tag; var remote_tag = type === 'UAS' ? message.from_tag : message.to_tag; var id = message.call_id + local_tag + remote_tag; - var early_dialog = this._earlyDialogs[id]; // Early Dialog. + var early_dialog = this._earlyDialogs[id]; + // Early Dialog. if (early) { if (early_dialog) { return true; } else { - early_dialog = new Dialog(this, message, type, Dialog.C.STATUS_EARLY); // Dialog has been successfully created. + early_dialog = new Dialog(this, message, type, Dialog.C.STATUS_EARLY); + // Dialog has been successfully created. if (early_dialog.error) { logger.debug(early_dialog.error); - this._failed('remote', message, JsSIP_C.causes.INTERNAL_ERROR); - return false; } else { this._earlyDialogs[id] = early_dialog; return true; } } - } // Confirmed Dialog. - else { - this._from_tag = message.from_tag; - this._to_tag = message.to_tag; // In case the dialog is in _early_ state, update it. - - if (early_dialog) { - early_dialog.update(message, type); - this._dialog = early_dialog; - delete this._earlyDialogs[id]; - return true; - } // Otherwise, create a _confirmed_ dialog. - - - var dialog = new Dialog(this, message, type); + } - if (dialog.error) { - logger.debug(dialog.error); + // Confirmed Dialog. + else { + this._from_tag = message.from_tag; + this._to_tag = message.to_tag; - this._failed('remote', message, JsSIP_C.causes.INTERNAL_ERROR); + // In case the dialog is in _early_ state, update it. + if (early_dialog) { + early_dialog.update(message, type); + this._dialog = early_dialog; + delete this._earlyDialogs[id]; + return true; + } - return false; - } else { - this._dialog = dialog; - return true; - } + // Otherwise, create a _confirmed_ dialog. + var dialog = new Dialog(this, message, type); + if (dialog.error) { + logger.debug(dialog.error); + this._failed('remote', message, JsSIP_C.causes.INTERNAL_ERROR); + return false; + } else { + this._dialog = dialog; + return true; } + } } + /** * In dialog INVITE Reception */ - }, { key: "_receiveReinvite", value: function _receiveReinvite(request) { var _this14 = this; - logger.debug('receiveReinvite()'); var contentType = request.hasHeader('Content-Type') ? request.getHeader('Content-Type').toLowerCase() : undefined; var data = { @@ -19164,43 +16253,35 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { reject: reject.bind(this) }; var rejected = false; - function reject() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; rejected = true; var status_code = options.status_code || 403; var reason_phrase = options.reason_phrase || ''; var extraHeaders = Utils.cloneArray(options.extraHeaders); - if (this._status !== C.STATUS_CONFIRMED) { return false; } - if (status_code < 300 || status_code >= 700) { throw new TypeError("Invalid status_code: ".concat(status_code)); } - request.reply(status_code, reason_phrase, extraHeaders); - } // Emit 'reinvite'. - + } + // Emit 'reinvite'. this.emit('reinvite', data); - if (rejected) { return; } + this._late_sdp = false; - this._late_sdp = false; // Request without SDP. - + // Request without SDP. if (!request.body) { this._late_sdp = true; - if (this._remoteHold) { this._remoteHold = false; - this._onunhold('remote'); } - this._connectionPromiseQueue = this._connectionPromiseQueue.then(function () { return _this14._createLocalDescription('offer', _this14._rtcOfferConstraints); }).then(function (sdp) { @@ -19209,59 +16290,51 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { request.reply(500); }); return; - } // Request with SDP. - + } + // Request with SDP. if (contentType !== 'application/sdp') { logger.debug('invalid Content-Type'); request.reply(415); return; } - - this._processInDialogSdpOffer(request) // Send answer. + this._processInDialogSdpOffer(request) + // Send answer. .then(function (desc) { if (_this14._status === C.STATUS_TERMINATED) { return; } - sendAnswer.call(_this14, desc); })["catch"](function (error) { logger.warn(error); }); - function sendAnswer(desc) { var _this15 = this; - var extraHeaders = ["Contact: ".concat(this._contact)]; - this._handleSessionTimersInIncomingRequest(request, extraHeaders); - if (this._late_sdp) { desc = this._mangleOffer(desc); } - request.reply(200, null, extraHeaders, desc, function () { _this15._status = C.STATUS_WAITING_FOR_ACK; - _this15._setInvite2xxTimer(request, desc); - _this15._setACKTimer(); - }); // If callback is given execute it. + }); + // If callback is given execute it. if (typeof data.callback === 'function') { data.callback(); } } } + /** * In dialog UPDATE Reception */ - }, { key: "_receiveUpdate", value: function _receiveUpdate(request) { var _this16 = this; - logger.debug('receiveUpdate()'); var contentType = request.hasHeader('Content-Type') ? request.getHeader('Content-Type').toLowerCase() : undefined; var data = { @@ -19270,61 +16343,51 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { reject: reject.bind(this) }; var rejected = false; - function reject() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; rejected = true; var status_code = options.status_code || 403; var reason_phrase = options.reason_phrase || ''; var extraHeaders = Utils.cloneArray(options.extraHeaders); - if (this._status !== C.STATUS_CONFIRMED) { return false; } - if (status_code < 300 || status_code >= 700) { throw new TypeError("Invalid status_code: ".concat(status_code)); } - request.reply(status_code, reason_phrase, extraHeaders); - } // Emit 'update'. - + } + // Emit 'update'. this.emit('update', data); - if (rejected) { return; } - if (!request.body) { sendAnswer.call(this, null); return; } - if (contentType !== 'application/sdp') { logger.debug('invalid Content-Type'); request.reply(415); return; } - - this._processInDialogSdpOffer(request) // Send answer. + this._processInDialogSdpOffer(request) + // Send answer. .then(function (desc) { if (_this16._status === C.STATUS_TERMINATED) { return; } - sendAnswer.call(_this16, desc); })["catch"](function (error) { logger.warn(error); }); - function sendAnswer(desc) { var extraHeaders = ["Contact: ".concat(this._contact)]; - this._handleSessionTimersInIncomingRequest(request, extraHeaders); + request.reply(200, null, extraHeaders, desc); - request.reply(200, null, extraHeaders, desc); // If callback is given execute it. - + // If callback is given execute it. if (typeof data.callback === 'function') { data.callback(); } @@ -19334,38 +16397,32 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { key: "_processInDialogSdpOffer", value: function _processInDialogSdpOffer(request) { var _this17 = this; - logger.debug('_processInDialogSdpOffer()'); var sdp = request.parseSDP(); var hold = false; - var _iterator4 = _createForOfIteratorHelper(sdp.media), - _step4; - + _step4; try { for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { var m = _step4.value; - if (holdMediaTypes.indexOf(m.type) === -1) { continue; } - var direction = m.direction || sdp.direction || 'sendrecv'; - if (direction === 'sendonly' || direction === 'inactive') { hold = true; - } // If at least one of the streams is active don't emit 'hold'. + } + // If at least one of the streams is active don't emit 'hold'. else { - hold = false; - break; - } + hold = false; + break; + } } } catch (err) { _iterator4.e(err); } finally { _iterator4.f(); } - var e = { originator: 'remote', type: 'offer', @@ -19377,40 +16434,35 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { type: 'offer', sdp: e.sdp }); - this._connectionPromiseQueue = this._connectionPromiseQueue // Set remote description. + this._connectionPromiseQueue = this._connectionPromiseQueue + // Set remote description. .then(function () { if (_this17._status === C.STATUS_TERMINATED) { throw new Error('terminated'); } - return _this17._connection.setRemoteDescription(offer)["catch"](function (error) { request.reply(488); logger.warn('emit "peerconnection:setremotedescriptionfailed" [error:%o]', error); - _this17.emit('peerconnection:setremotedescriptionfailed', error); - throw error; }); }).then(function () { if (_this17._status === C.STATUS_TERMINATED) { throw new Error('terminated'); } - if (_this17._remoteHold === true && hold === false) { _this17._remoteHold = false; - _this17._onunhold('remote'); } else if (_this17._remoteHold === false && hold === true) { _this17._remoteHold = true; - _this17._onhold('remote'); } - }) // Create local description. + }) + // Create local description. .then(function () { if (_this17._status === C.STATUS_TERMINATED) { throw new Error('terminated'); } - return _this17._createLocalDescription('answer', _this17._rtcAnswerConstraints)["catch"](function (error) { request.reply(500); logger.warn('emit "peerconnection:createtelocaldescriptionfailed" [error:%o]', error); @@ -19421,34 +16473,32 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { }); return this._connectionPromiseQueue; } + /** * In dialog Refer Reception */ - }, { key: "_receiveRefer", value: function _receiveRefer(request) { var _this18 = this; - logger.debug('receiveRefer()'); - if (!request.refer_to) { logger.debug('no Refer-To header field present in REFER'); request.reply(400); return; } - if (request.refer_to.uri.scheme !== JsSIP_C.SIP) { logger.debug('Refer-To header field points to a non-SIP URI scheme'); request.reply(416); return; - } // Reply before the transaction timer expires. - + } + // Reply before the transaction timer expires. request.reply(202); var notifier = new RTCSession_ReferNotifier(this, request.cseq); - logger.debug('emit "refer"'); // Emit 'refer'. + logger.debug('emit "refer"'); + // Emit 'refer'. this.emit('refer', { request: request, accept: function accept(initCallback, options) { @@ -19458,15 +16508,12 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { _reject.call(_this18); } }); - function _accept(initCallback) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; initCallback = typeof initCallback === 'function' ? initCallback : null; - if (this._status !== C.STATUS_WAITING_FOR_ACK && this._status !== C.STATUS_CONFIRMED) { return false; } - var session = new RTCSession(this._ua); session.on('progress', function (_ref2) { var response = _ref2.response; @@ -19478,47 +16525,42 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { }); session.on('_failed', function (_ref4) { var message = _ref4.message, - cause = _ref4.cause; - + cause = _ref4.cause; if (message) { notifier.notify(message.status_code, message.reason_phrase); } else { notifier.notify(487, cause); } - }); // Consider the Replaces header present in the Refer-To URI. + }); + // Consider the Replaces header present in the Refer-To URI. if (request.refer_to.uri.hasHeader('replaces')) { var replaces = decodeURIComponent(request.refer_to.uri.getHeader('replaces')); options.extraHeaders = Utils.cloneArray(options.extraHeaders); options.extraHeaders.push("Replaces: ".concat(replaces)); } - session.connect(request.refer_to.uri.toAor(), options, initCallback); } - function _reject() { notifier.notify(603); } } + /** * In dialog Notify Reception */ - }, { key: "_receiveNotify", value: function _receiveNotify(request) { logger.debug('receiveNotify()'); - if (!request.event) { request.reply(400); } - switch (request.event.event) { case 'refer': { var id; var referSubscriber; - if (request.event.params && request.event.params.id) { id = request.event.params.id; referSubscriber = this._referSubscribers[id]; @@ -19528,55 +16570,48 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { request.reply(400, 'Missing event id parameter'); return; } - if (!referSubscriber) { request.reply(481, 'Subscription does not exist'); return; } - referSubscriber.receiveNotify(request); request.reply(200); break; } - default: { request.reply(489); } } } + /** * INVITE with Replaces Reception */ - }, { key: "_receiveReplaces", value: function _receiveReplaces(request) { var _this20 = this; - logger.debug('receiveReplaces()'); - function _accept2(initCallback) { var _this19 = this; - if (this._status !== C.STATUS_WAITING_FOR_ACK && this._status !== C.STATUS_CONFIRMED) { return false; } + var session = new RTCSession(this._ua); - var session = new RTCSession(this._ua); // Terminate the current session when the new one is confirmed. - + // Terminate the current session when the new one is confirmed. session.on('confirmed', function () { _this19.terminate(); }); session.init_incoming(request, initCallback); } - function _reject2() { logger.debug('Replaced INVITE rejected by the user'); request.reply(486); - } // Emit 'replace'. - + } + // Emit 'replace'. this.emit('replaces', { request: request, accept: function accept(initCallback) { @@ -19587,15 +16622,14 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { } }); } + /** * Initial Request Sender */ - }, { key: "_sendInitialRequest", value: function _sendInitialRequest(mediaConstraints, rtcOfferConstraints, mediaStream) { var _this21 = this; - var request_sender = new RequestSender(this._ua, this._request, { onRequestTimeout: function onRequestTimeout() { _this21.onRequestTimeout(); @@ -19610,103 +16644,108 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { onReceiveResponse: function onReceiveResponse(response) { _this21._receiveInviteResponse(response); } - }); // This Promise is resolved within the next iteration, so the app has now - // a chance to set events such as 'peerconnection' and 'connecting'. + }); - Promise.resolve() // Get a stream if required. + // This Promise is resolved within the next iteration, so the app has now + // a chance to set events such as 'peerconnection' and 'connecting'. + Promise.resolve() + // Get a stream if required. .then(function () { // A stream is given, let the app set events such as 'peerconnection' and 'connecting'. if (mediaStream) { return mediaStream; - } // Request for user media access. + } + // Request for user media access. else if (mediaConstraints.audio || mediaConstraints.video) { - _this21._localMediaStreamLocallyGenerated = true; - return navigator.mediaDevices.getUserMedia(mediaConstraints)["catch"](function (error) { - if (_this21._status === C.STATUS_TERMINATED) { - throw new Error('terminated'); - } - - _this21._failed('local', null, JsSIP_C.causes.USER_DENIED_MEDIA_ACCESS); - - logger.warn('emit "getusermediafailed" [error:%o]', error); - - _this21.emit('getusermediafailed', error); - - throw error; - }); - } + if (!navigator.mediaDevices) { + var error = new Error('Media inaccessible; Secure context required (eg. https://, file://)'); + + //this._failed('local', null, JsSIP_C.causes.USER_DENIED_MEDIA_ACCESS); + //this.emit('getusermediafailed', error); + throw error; + } + _this21._localMediaStreamLocallyGenerated = true; + logger.warn("getUserMedia requesting ".concat(JSON.stringify(mediaConstraints), " from ").concat(JSON.stringify(navigator.mediaDevices))); + return navigator.mediaDevices.getUserMedia(mediaConstraints).then(function (stream) { + logger.warn("getUserMedia gives ".concat(JSON.stringify(stream))); + return stream; + })["catch"](function (error) { + logger.warn("getUserMedia error ".concat(JSON.stringify(error))); + if (_this21._status === C.STATUS_TERMINATED) { + throw new Error('terminated'); + } + _this21._failed('local', null, JsSIP_C.causes.USER_DENIED_MEDIA_ACCESS); + logger.warn('emit "getusermediafailed" [error:%o]', error); + _this21.emit('getusermediafailed', error); + throw error; + }); + } }).then(function (stream) { + logger.warn("getUserMedia returned stream ".concat(JSON.stringify(stream))); if (_this21._status === C.STATUS_TERMINATED) { throw new Error('terminated'); } - _this21._localMediaStream = stream; - if (stream) { stream.getTracks().forEach(function (track) { _this21._connection.addTrack(track, stream); }); - } // TODO: should this be triggered here? - + } + // TODO: should this be triggered here? _this21._connecting(_this21._request); - return _this21._createLocalDescription('offer', rtcOfferConstraints)["catch"](function (error) { _this21._failed('local', null, JsSIP_C.causes.WEBRTC_ERROR); - throw error; }); }).then(function (desc) { if (_this21._is_canceled || _this21._status === C.STATUS_TERMINATED) { throw new Error('terminated'); } - _this21._request.body = desc; _this21._status = C.STATUS_INVITE_SENT; - logger.debug('emit "sending" [request:%o]', _this21._request); // Emit 'sending' so the app can mangle the body before the request is sent. + logger.debug('emit "sending" [request:%o]', _this21._request); + // Emit 'sending' so the app can mangle the body before the request is sent. _this21.emit('sending', { request: _this21._request }); - request_sender.send(); })["catch"](function (error) { + logger.warn("getUserMedia error: ".concat(JSON.stringify(error))); if (_this21._status === C.STATUS_TERMINATED) { return; } - - logger.warn(error); + throw error; }); } + /** * Get DTMF RTCRtpSender. */ - }, { key: "_getDTMFRTPSender", value: function _getDTMFRTPSender() { var sender = this._connection.getSenders().find(function (rtpSender) { return rtpSender.track && rtpSender.track.kind === 'audio'; }); - if (!(sender && sender.dtmf)) { logger.warn('sendDTMF() | no local audio track to send DTMF with'); return; } - return sender.dtmf; } + /** * Reception of Response for Initial INVITE */ - }, { key: "_receiveInviteResponse", value: function _receiveInviteResponse(response) { var _this22 = this; + logger.debug('receiveInviteResponse()'); - logger.debug('receiveInviteResponse()'); // Handle 2XX retransmissions and responses from forked requests. - + // Handle 2XX retransmissions and responses from forked requests. if (this._dialog && response.status_code >= 200 && response.status_code <= 299) { /* * If it is a retransmission from the endpoint that established @@ -19715,65 +16754,57 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { if (this._dialog.id.call_id === response.call_id && this._dialog.id.local_tag === response.from_tag && this._dialog.id.remote_tag === response.to_tag) { this.sendRequest(JsSIP_C.ACK); return; - } // If not, send an ACK and terminate. - else { - var dialog = new Dialog(this, response, 'UAC'); - - if (dialog.error !== undefined) { - logger.debug(dialog.error); - return; - } + } - this.sendRequest(JsSIP_C.ACK); - this.sendRequest(JsSIP_C.BYE); + // If not, send an ACK and terminate. + else { + var dialog = new Dialog(this, response, 'UAC'); + if (dialog.error !== undefined) { + logger.debug(dialog.error); return; } - } // Proceed to cancellation if the user requested. - + this.sendRequest(JsSIP_C.ACK); + this.sendRequest(JsSIP_C.BYE); + return; + } + } + // Proceed to cancellation if the user requested. if (this._is_canceled) { if (response.status_code >= 100 && response.status_code < 200) { this._request.cancel(this._cancel_reason); } else if (response.status_code >= 200 && response.status_code < 299) { this._acceptAndTerminate(response); } - return; } - if (this._status !== C.STATUS_INVITE_SENT && this._status !== C.STATUS_1XX_RECEIVED) { return; } - switch (true) { case /^100$/.test(response.status_code): this._status = C.STATUS_1XX_RECEIVED; break; - case /^1[0-9]{2}$/.test(response.status_code): { // Do nothing with 1xx responses without To tag. if (!response.to_tag) { logger.debug('1xx response received without to tag'); break; - } // Create Early Dialog if 1XX comes with contact. - + } + // Create Early Dialog if 1XX comes with contact. if (response.hasHeader('contact')) { // An error on dialog creation will fire 'failed' event. if (!this._createDialog(response, 'UAC', true)) { break; } } - this._status = C.STATUS_1XX_RECEIVED; - if (!response.body) { this._progress('remote', response); - break; } - var e = { originator: 'remote', type: 'answer', @@ -19791,29 +16822,23 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { return _this22._progress('remote', response); })["catch"](function (error) { logger.warn('emit "peerconnection:setremotedescriptionfailed" [error:%o]', error); - _this22.emit('peerconnection:setremotedescriptionfailed', error); }); break; } - case /^2[0-9]{2}$/.test(response.status_code): { this._status = C.STATUS_CONFIRMED; - if (!response.body) { this._acceptAndTerminate(response, 400, JsSIP_C.causes.MISSING_SDP); - this._failed('remote', response, JsSIP_C.causes.BAD_MEDIA_DESCRIPTION); - break; - } // An error on dialog creation will fire 'failed' event. - + } + // An error on dialog creation will fire 'failed' event. if (!this._createDialog(response, 'UAC')) { break; } - var _e = { originator: 'remote', type: 'answer', @@ -19821,12 +16846,10 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { }; logger.debug('emit "sdp"'); this.emit('sdp', _e); - var _answer = new RTCSessionDescription({ type: 'answer', sdp: _e.sdp }); - this._connectionPromiseQueue = this._connectionPromiseQueue.then(function () { // Be ready for 200 with SDP after a 180/183 with SDP. // We created a SDP 'answer' for it, so check the current signaling state. @@ -19835,7 +16858,6 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { return _this22._connection.setLocalDescription(offer); })["catch"](function (error) { _this22._acceptAndTerminate(response, 500, error.toString()); - _this22._failed('local', response, JsSIP_C.causes.WEBRTC_ERROR); }); } @@ -19843,42 +16865,33 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { _this22._connection.setRemoteDescription(_answer).then(function () { // Handle Session Timers. _this22._handleSessionTimersInIncomingResponse(response); - _this22._accepted('remote', response); - _this22.sendRequest(JsSIP_C.ACK); - _this22._confirmed('local', null); })["catch"](function (error) { _this22._acceptAndTerminate(response, 488, 'Not Acceptable Here'); - _this22._failed('remote', response, JsSIP_C.causes.BAD_MEDIA_DESCRIPTION); - logger.warn('emit "peerconnection:setremotedescriptionfailed" [error:%o]', error); - _this22.emit('peerconnection:setremotedescriptionfailed', error); }); }); break; } - default: { var cause = Utils.sipErrorCause(response.status_code); - this._failed('remote', response, cause); } } } + /** * Send Re-INVITE */ - }, { key: "_sendReinvite", value: function _sendReinvite() { var _this23 = this; - var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; logger.debug('sendReinvite()'); var extraHeaders = Utils.cloneArray(options.extraHeaders); @@ -19886,12 +16899,12 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { var rtcOfferConstraints = options.rtcOfferConstraints || this._rtcOfferConstraints || null; var succeeded = false; extraHeaders.push("Contact: ".concat(this._contact)); - extraHeaders.push('Content-Type: application/sdp'); // Session Timers. + extraHeaders.push('Content-Type: application/sdp'); + // Session Timers. if (this._sessionTimers.running) { extraHeaders.push("Session-Expires: ".concat(this._sessionTimers.currentExpires, ";refresher=").concat(this._sessionTimers.refresher ? 'uac' : 'uas')); } - this._connectionPromiseQueue = this._connectionPromiseQueue.then(function () { return _this23._createLocalDescription('offer', rtcOfferConstraints); }).then(function (sdp) { @@ -19902,9 +16915,7 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { sdp: sdp }; logger.debug('emit "sdp"'); - _this23.emit('sdp', e); - _this23.sendRequest(JsSIP_C.INVITE, { extraHeaders: extraHeaders, body: sdp, @@ -19918,39 +16929,34 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { }, onTransportError: function onTransportError() { _this23.onTransportError(); // Do nothing because session ends. - }, onRequestTimeout: function onRequestTimeout() { _this23.onRequestTimeout(); // Do nothing because session ends. - }, onDialogError: function onDialogError() { _this23.onDialogError(); // Do nothing because session ends. - } } }); })["catch"](function () { onFailed(); }); - function onSucceeded(response) { var _this24 = this; - if (this._status === C.STATUS_TERMINATED) { return; } + this.sendRequest(JsSIP_C.ACK); - this.sendRequest(JsSIP_C.ACK); // If it is a 2XX retransmission exit now. - + // If it is a 2XX retransmission exit now. if (succeeded) { return; - } // Handle Session Timers. - - - this._handleSessionTimersInIncomingResponse(response); // Must have SDP answer. + } + // Handle Session Timers. + this._handleSessionTimersInIncomingResponse(response); + // Must have SDP answer. if (!response.body) { onFailed.call(this); return; @@ -19958,7 +16964,6 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { onFailed.call(this); return; } - var e = { originator: 'remote', type: 'answer', @@ -19979,26 +16984,23 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { })["catch"](function (error) { onFailed.call(_this24); logger.warn('emit "peerconnection:setremotedescriptionfailed" [error:%o]', error); - _this24.emit('peerconnection:setremotedescriptionfailed', error); }); } - function onFailed(response) { if (eventHandlers.failed) { eventHandlers.failed(response); } } } + /** * Send UPDATE */ - }, { key: "_sendUpdate", value: function _sendUpdate() { var _this25 = this; - var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; logger.debug('sendUpdate()'); var extraHeaders = Utils.cloneArray(options.extraHeaders); @@ -20006,12 +17008,12 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { var rtcOfferConstraints = options.rtcOfferConstraints || this._rtcOfferConstraints || null; var sdpOffer = options.sdpOffer || false; var succeeded = false; - extraHeaders.push("Contact: ".concat(this._contact)); // Session Timers. + extraHeaders.push("Contact: ".concat(this._contact)); + // Session Timers. if (this._sessionTimers.running) { extraHeaders.push("Session-Expires: ".concat(this._sessionTimers.currentExpires, ";refresher=").concat(this._sessionTimers.refresher ? 'uac' : 'uas')); } - if (sdpOffer) { extraHeaders.push('Content-Type: application/sdp'); this._connectionPromiseQueue = this._connectionPromiseQueue.then(function () { @@ -20024,9 +17026,7 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { sdp: sdp }; logger.debug('emit "sdp"'); - _this25.emit('sdp', e); - _this25.sendRequest(JsSIP_C.UPDATE, { extraHeaders: extraHeaders, body: sdp, @@ -20040,64 +17040,58 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { }, onTransportError: function onTransportError() { _this25.onTransportError(); // Do nothing because session ends. - }, onRequestTimeout: function onRequestTimeout() { _this25.onRequestTimeout(); // Do nothing because session ends. - }, onDialogError: function onDialogError() { _this25.onDialogError(); // Do nothing because session ends. - } } }); })["catch"](function () { onFailed.call(_this25); }); - } // No SDP. + } + + // No SDP. else { - this.sendRequest(JsSIP_C.UPDATE, { - extraHeaders: extraHeaders, - eventHandlers: { - onSuccessResponse: function onSuccessResponse(response) { - onSucceeded.call(_this25, response); - }, - onErrorResponse: function onErrorResponse(response) { - onFailed.call(_this25, response); - }, - onTransportError: function onTransportError() { - _this25.onTransportError(); // Do nothing because session ends. - - }, - onRequestTimeout: function onRequestTimeout() { - _this25.onRequestTimeout(); // Do nothing because session ends. - - }, - onDialogError: function onDialogError() { - _this25.onDialogError(); // Do nothing because session ends. - - } + this.sendRequest(JsSIP_C.UPDATE, { + extraHeaders: extraHeaders, + eventHandlers: { + onSuccessResponse: function onSuccessResponse(response) { + onSucceeded.call(_this25, response); + }, + onErrorResponse: function onErrorResponse(response) { + onFailed.call(_this25, response); + }, + onTransportError: function onTransportError() { + _this25.onTransportError(); // Do nothing because session ends. + }, + onRequestTimeout: function onRequestTimeout() { + _this25.onRequestTimeout(); // Do nothing because session ends. + }, + onDialogError: function onDialogError() { + _this25.onDialogError(); // Do nothing because session ends. } - }); - } - + } + }); + } function onSucceeded(response) { var _this26 = this; - if (this._status === C.STATUS_TERMINATED) { return; - } // If it is a 2XX retransmission exit now. - + } + // If it is a 2XX retransmission exit now. if (succeeded) { return; - } // Handle Session Timers. - - - this._handleSessionTimersInIncomingResponse(response); // Must have SDP answer. + } + // Handle Session Timers. + this._handleSessionTimersInIncomingResponse(response); + // Must have SDP answer. if (sdpOffer) { if (!response.body) { onFailed.call(this); @@ -20106,7 +17100,6 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { onFailed.call(this); return; } - var e = { originator: 'remote', type: 'answer', @@ -20127,15 +17120,14 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { })["catch"](function (error) { onFailed.call(_this26); logger.warn('emit "peerconnection:setremotedescriptionfailed" [error:%o]', error); - _this26.emit('peerconnection:setremotedescriptionfailed', error); }); - } // No SDP answer. + } + // No SDP answer. else if (eventHandlers.succeeded) { - eventHandlers.succeeded(response); - } + eventHandlers.succeeded(response); + } } - function onFailed(response) { if (eventHandlers.failed) { eventHandlers.failed(response); @@ -20147,50 +17139,45 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { value: function _acceptAndTerminate(response, status_code, reason_phrase) { logger.debug('acceptAndTerminate()'); var extraHeaders = []; - if (status_code) { reason_phrase = reason_phrase || JsSIP_C.REASON_PHRASE[status_code] || ''; extraHeaders.push("Reason: SIP ;cause=".concat(status_code, "; text=\"").concat(reason_phrase, "\"")); - } // An error on dialog creation will fire 'failed' event. - + } + // An error on dialog creation will fire 'failed' event. if (this._dialog || this._createDialog(response, 'UAC')) { this.sendRequest(JsSIP_C.ACK); this.sendRequest(JsSIP_C.BYE, { extraHeaders: extraHeaders }); - } // Update session status. - + } + // Update session status. this._status = C.STATUS_TERMINATED; } + /** * Correctly set the SDP direction attributes if the call is on local hold */ - }, { key: "_mangleOffer", value: function _mangleOffer(sdp) { if (!this._localHold && !this._remoteHold) { return sdp; } + sdp = sdp_transform.parse(sdp); - sdp = sdp_transform.parse(sdp); // Local hold. - + // Local hold. if (this._localHold && !this._remoteHold) { logger.debug('mangleOffer() | me on hold, mangling offer'); - var _iterator5 = _createForOfIteratorHelper(sdp.media), - _step5; - + _step5; try { for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) { var m = _step5.value; - if (holdMediaTypes.indexOf(m.type) === -1) { continue; } - if (!m.direction) { m.direction = 'sendonly'; } else if (m.direction === 'sendrecv') { @@ -20204,98 +17191,84 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { } finally { _iterator5.f(); } - } // Local and remote hold. + } + // Local and remote hold. else if (this._localHold && this._remoteHold) { - logger.debug('mangleOffer() | both on hold, mangling offer'); - - var _iterator6 = _createForOfIteratorHelper(sdp.media), - _step6; - - try { - for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) { - var _m = _step6.value; - - if (holdMediaTypes.indexOf(_m.type) === -1) { - continue; - } - - _m.direction = 'inactive'; + logger.debug('mangleOffer() | both on hold, mangling offer'); + var _iterator6 = _createForOfIteratorHelper(sdp.media), + _step6; + try { + for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) { + var _m = _step6.value; + if (holdMediaTypes.indexOf(_m.type) === -1) { + continue; } - } catch (err) { - _iterator6.e(err); - } finally { - _iterator6.f(); + _m.direction = 'inactive'; } - } // Remote hold. - else if (this._remoteHold) { - logger.debug('mangleOffer() | remote on hold, mangling offer'); - - var _iterator7 = _createForOfIteratorHelper(sdp.media), - _step7; - - try { - for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) { - var _m2 = _step7.value; - - if (holdMediaTypes.indexOf(_m2.type) === -1) { - continue; - } - - if (!_m2.direction) { - _m2.direction = 'recvonly'; - } else if (_m2.direction === 'sendrecv') { - _m2.direction = 'recvonly'; - } else if (_m2.direction === 'recvonly') { - _m2.direction = 'inactive'; - } - } - } catch (err) { - _iterator7.e(err); - } finally { - _iterator7.f(); + } catch (err) { + _iterator6.e(err); + } finally { + _iterator6.f(); + } + } + // Remote hold. + else if (this._remoteHold) { + logger.debug('mangleOffer() | remote on hold, mangling offer'); + var _iterator7 = _createForOfIteratorHelper(sdp.media), + _step7; + try { + for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) { + var _m2 = _step7.value; + if (holdMediaTypes.indexOf(_m2.type) === -1) { + continue; + } + if (!_m2.direction) { + _m2.direction = 'recvonly'; + } else if (_m2.direction === 'sendrecv') { + _m2.direction = 'recvonly'; + } else if (_m2.direction === 'recvonly') { + _m2.direction = 'inactive'; } } - + } catch (err) { + _iterator7.e(err); + } finally { + _iterator7.f(); + } + } return sdp_transform.write(sdp); } }, { key: "_setLocalMediaStatus", value: function _setLocalMediaStatus() { var enableAudio = true, - enableVideo = true; - + enableVideo = true; if (this._localHold || this._remoteHold) { enableAudio = false; enableVideo = false; } - if (this._audioMuted) { enableAudio = false; } - if (this._videoMuted) { enableVideo = false; } - this._toggleMuteAudio(!enableAudio); - this._toggleMuteVideo(!enableVideo); } + /** * Handle SessionTimers for an incoming INVITE or UPDATE. * @param {IncomingRequest} request * @param {Array} responseExtraHeaders Extra headers for the 200 response. */ - }, { key: "_handleSessionTimersInIncomingRequest", value: function _handleSessionTimersInIncomingRequest(request, responseExtraHeaders) { if (!this._sessionTimers.enabled) { return; } - var session_expires_refresher; - if (request.session_expires && request.session_expires >= JsSIP_C.MIN_SESSION_EXPIRES) { this._sessionTimers.currentExpires = request.session_expires; session_expires_refresher = request.session_expires_refresher || 'uas'; @@ -20303,26 +17276,22 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { this._sessionTimers.currentExpires = this._sessionTimers.defaultExpires; session_expires_refresher = 'uas'; } - responseExtraHeaders.push("Session-Expires: ".concat(this._sessionTimers.currentExpires, ";refresher=").concat(session_expires_refresher)); this._sessionTimers.refresher = session_expires_refresher === 'uas'; - this._runSessionTimer(); } + /** * Handle SessionTimers for an incoming response to INVITE or UPDATE. * @param {IncomingResponse} response */ - }, { key: "_handleSessionTimersInIncomingResponse", value: function _handleSessionTimersInIncomingResponse(response) { if (!this._sessionTimers.enabled) { return; } - var session_expires_refresher; - if (response.session_expires && response.session_expires >= JsSIP_C.MIN_SESSION_EXPIRES) { this._sessionTimers.currentExpires = response.session_expires; session_expires_refresher = response.session_expires_refresher || 'uac'; @@ -20330,54 +17299,49 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { this._sessionTimers.currentExpires = this._sessionTimers.defaultExpires; session_expires_refresher = 'uac'; } - this._sessionTimers.refresher = session_expires_refresher === 'uac'; - this._runSessionTimer(); } }, { key: "_runSessionTimer", value: function _runSessionTimer() { var _this27 = this; - var expires = this._sessionTimers.currentExpires; this._sessionTimers.running = true; - clearTimeout(this._sessionTimers.timer); // I'm the refresher. + clearTimeout(this._sessionTimers.timer); + // I'm the refresher. if (this._sessionTimers.refresher) { this._sessionTimers.timer = setTimeout(function () { if (_this27._status === C.STATUS_TERMINATED) { return; } - if (!_this27._isReadyToReOffer()) { return; } - logger.debug('runSessionTimer() | sending session refresh request'); - if (_this27._sessionTimers.refreshMethod === JsSIP_C.UPDATE) { _this27._sendUpdate(); } else { _this27._sendReinvite(); } }, expires * 500); // Half the given interval (as the RFC states). - } // I'm not the refresher. - else { - this._sessionTimers.timer = setTimeout(function () { - if (_this27._status === C.STATUS_TERMINATED) { - return; - } - - logger.warn('runSessionTimer() | timer expired, terminating the session'); + } - _this27.terminate({ - cause: JsSIP_C.causes.REQUEST_TIMEOUT, - status_code: 408, - reason_phrase: 'Session Timer Expired' - }); - }, expires * 1100); - } + // I'm not the refresher. + else { + this._sessionTimers.timer = setTimeout(function () { + if (_this27._status === C.STATUS_TERMINATED) { + return; + } + logger.warn('runSessionTimer() | timer expired, terminating the session'); + _this27.terminate({ + cause: JsSIP_C.causes.REQUEST_TIMEOUT, + status_code: 408, + reason_phrase: 'Session Timer Expired' + }); + }, expires * 1100); + } } }, { key: "_toggleMuteAudio", @@ -20385,10 +17349,8 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { var senders = this._connection.getSenders().filter(function (sender) { return sender.track && sender.track.kind === 'audio'; }); - var _iterator8 = _createForOfIteratorHelper(senders), - _step8; - + _step8; try { for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) { var sender = _step8.value; @@ -20406,10 +17368,8 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { var senders = this._connection.getSenders().filter(function (sender) { return sender.track && sender.track.kind === 'video'; }); - var _iterator9 = _createForOfIteratorHelper(senders), - _step9; - + _step9; try { for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) { var sender = _step9.value; @@ -20425,7 +17385,6 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { key: "_newRTCSession", value: function _newRTCSession(originator, request) { logger.debug('newRTCSession()'); - this._ua.newRTCSession(this, { originator: originator, session: this, @@ -20478,9 +17437,7 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { value: function _ended(originator, message, cause) { logger.debug('session ended'); this._end_time = new Date(); - this._close(); - logger.debug('emit "ended"'); this.emit('ended', { originator: originator, @@ -20491,17 +17448,16 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { }, { key: "_failed", value: function _failed(originator, message, cause) { - logger.debug('session failed'); // Emit private '_failed' event first. + logger.debug('session failed'); + // Emit private '_failed' event first. logger.debug('emit "_failed"'); this.emit('_failed', { originator: originator, message: message || null, cause: cause }); - this._close(); - logger.debug('emit "failed"'); this.emit('failed', { originator: originator, @@ -20513,9 +17469,7 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { key: "_onhold", value: function _onhold(originator) { logger.debug('session onhold'); - this._setLocalMediaStatus(); - logger.debug('emit "hold"'); this.emit('hold', { originator: originator @@ -20525,9 +17479,7 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { key: "_onunhold", value: function _onunhold(originator) { logger.debug('session onunhold'); - this._setLocalMediaStatus(); - logger.debug('emit "unhold"'); this.emit('unhold', { originator: originator @@ -20537,11 +17489,9 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { key: "_onmute", value: function _onmute(_ref5) { var audio = _ref5.audio, - video = _ref5.video; + video = _ref5.video; logger.debug('session onmute'); - this._setLocalMediaStatus(); - logger.debug('emit "muted"'); this.emit('muted', { audio: audio, @@ -20552,120 +17502,47 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { key: "_onunmute", value: function _onunmute(_ref6) { var audio = _ref6.audio, - video = _ref6.video; + video = _ref6.video; logger.debug('session onunmute'); - this._setLocalMediaStatus(); - logger.debug('emit "unmuted"'); this.emit('unmuted', { audio: audio, video: video }); } - }, { + }], [{ key: "C", - get: function get() { + get: + /** + * Expose C object. + */ + function get() { return C; - } // Expose session failed/ended causes as a property of the RTCSession instance. - - }, { - key: "causes", - get: function get() { - return JsSIP_C.causes; - } - }, { - key: "id", - get: function get() { - return this._id; - } - }, { - key: "connection", - get: function get() { - return this._connection; - } - }, { - key: "contact", - get: function get() { - return this._contact; - } - }, { - key: "direction", - get: function get() { - return this._direction; - } - }, { - key: "local_identity", - get: function get() { - return this._local_identity; - } - }, { - key: "remote_identity", - get: function get() { - return this._remote_identity; - } - }, { - key: "start_time", - get: function get() { - return this._start_time; - } - }, { - key: "end_time", - get: function get() { - return this._end_time; - } - }, { - key: "data", - get: function get() { - return this._data; - }, - set: function set(_data) { - this._data = _data; - } - }, { - key: "status", - get: function get() { - return this._status; } }]); - - return RTCSession; }(EventEmitter); },{"./Constants":2,"./Dialog":3,"./Exceptions":6,"./Logger":9,"./RTCSession/DTMF":15,"./RTCSession/Info":16,"./RTCSession/ReferNotifier":17,"./RTCSession/ReferSubscriber":18,"./RequestSender":20,"./SIPMessage":21,"./Timers":23,"./Transactions":24,"./URI":27,"./Utils":28,"events":31,"sdp-transform":37}],15:[function(require,module,exports){ "use strict"; -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } - -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } - -function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } - -function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - -function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - -function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } - -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } var EventEmitter = require('events').EventEmitter; - var Logger = require('../Logger'); - var JsSIP_C = require('../Constants'); - var Exceptions = require('../Exceptions'); - var Utils = require('../Utils'); - var logger = new Logger('RTCSession:DTMF'); var C = { MIN_DURATION: 70, @@ -20674,18 +17551,11 @@ var C = { MIN_INTER_TONE_GAP: 50, DEFAULT_INTER_TONE_GAP: 500 }; - module.exports = /*#__PURE__*/function (_EventEmitter) { - _inherits(DTMF, _EventEmitter); - - var _super = _createSuper(DTMF); - function DTMF(session) { var _this; - _classCallCheck(this, DTMF); - - _this = _super.call(this); + _this = _callSuper(this, DTMF); _this._session = session; _this._direction = null; _this._tone = null; @@ -20693,54 +17563,60 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { _this._request = null; return _this; } - - _createClass(DTMF, [{ + _inherits(DTMF, _EventEmitter); + return _createClass(DTMF, [{ + key: "tone", + get: function get() { + return this._tone; + } + }, { + key: "duration", + get: function get() { + return this._duration; + } + }, { key: "send", value: function send(tone) { var _this2 = this; - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - if (tone === undefined) { throw new TypeError('Not enough arguments'); } + this._direction = 'outgoing'; - this._direction = 'outgoing'; // Check RTCSession Status. - + // 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); } - var extraHeaders = Utils.cloneArray(options.extraHeaders); - this.eventHandlers = Utils.cloneObject(options.eventHandlers); // Check tone type. + this.eventHandlers = Utils.cloneObject(options.eventHandlers); + // Check tone type. if (typeof tone === 'string') { tone = tone.toUpperCase(); } else if (typeof tone === 'number') { tone = tone.toString(); } else { throw new TypeError("Invalid tone: ".concat(tone)); - } // Check tone value. - + } + // Check tone value. if (!tone.match(/^[0-9A-DR#*]$/)) { throw new TypeError("Invalid tone: ".concat(tone)); } else { this._tone = tone; - } // Duration is checked/corrected in RTCSession. - + } + // Duration is checked/corrected in RTCSession. this._duration = options.duration; extraHeaders.push('Content-Type: application/dtmf-relay'); var body = "Signal=".concat(this._tone, "\r\n"); body += "Duration=".concat(this._duration); - this._session.newDTMF({ originator: 'local', dtmf: this, request: this._request }); - this._session.sendRequest(JsSIP_C.INFO, { extraHeaders: extraHeaders, eventHandlers: { @@ -20754,7 +17630,6 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { if (_this2.eventHandlers.onFailed) { _this2.eventHandlers.onFailed(); } - _this2.emit('failed', { originator: 'remote', response: response @@ -20781,27 +17656,22 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { this._direction = 'incoming'; this._request = request; request.reply(200); - if (request.body) { var body = request.body.split('\n'); - if (body.length >= 1) { if (reg_tone.test(body[0])) { this._tone = body[0].replace(reg_tone, '$2'); } } - if (body.length >= 2) { if (reg_duration.test(body[1])) { this._duration = parseInt(body[1].replace(reg_duration, '$2'), 10); } } } - if (!this._duration) { this._duration = C.DEFAULT_DURATION; } - if (!this._tone) { logger.debug('invalid INFO DTMF received, discarded'); } else { @@ -20812,105 +17682,78 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { }); } } - }, { - key: "tone", - get: function get() { - return this._tone; - } - }, { - key: "duration", - get: function get() { - return this._duration; - } }]); - - return DTMF; }(EventEmitter); + /** * Expose C object. */ - - module.exports.C = C; },{"../Constants":2,"../Exceptions":6,"../Logger":9,"../Utils":28,"events":31}],16:[function(require,module,exports){ "use strict"; -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } - -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } - -function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } - -function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - -function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - -function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } - -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } var EventEmitter = require('events').EventEmitter; - var JsSIP_C = require('../Constants'); - var Exceptions = require('../Exceptions'); - var Utils = require('../Utils'); - module.exports = /*#__PURE__*/function (_EventEmitter) { - _inherits(Info, _EventEmitter); - - var _super = _createSuper(Info); - function Info(session) { var _this; - _classCallCheck(this, Info); - - _this = _super.call(this); + _this = _callSuper(this, Info); _this._session = session; _this._direction = null; _this._contentType = null; _this._body = null; return _this; } - - _createClass(Info, [{ + _inherits(Info, _EventEmitter); + return _createClass(Info, [{ + key: "contentType", + get: function get() { + return this._contentType; + } + }, { + key: "body", + get: function get() { + return this._body; + } + }, { key: "send", value: function send(contentType, body) { var _this2 = this; - var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; this._direction = 'outgoing'; - if (contentType === undefined) { throw new TypeError('Not enough arguments'); - } // Check RTCSession Status. - + } + // 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; var extraHeaders = Utils.cloneArray(options.extraHeaders); extraHeaders.push("Content-Type: ".concat(contentType)); - this._session.newInfo({ originator: 'local', info: this, request: this.request }); - this._session.sendRequest(JsSIP_C.INFO, { extraHeaders: extraHeaders, eventHandlers: { @@ -20947,78 +17790,58 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { 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: request }); } - }, { - key: "contentType", - get: function get() { - return this._contentType; - } - }, { - key: "body", - get: function get() { - return this._body; - } }]); - - return Info; }(EventEmitter); },{"../Constants":2,"../Exceptions":6,"../Utils":28,"events":31}],17:[function(require,module,exports){ "use strict"; -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } var Logger = require('../Logger'); - var JsSIP_C = require('../Constants'); - var logger = new Logger('RTCSession:ReferNotifier'); var C = { event_type: 'refer', body_type: 'message/sipfrag;version=2.0', expires: 300 }; - module.exports = /*#__PURE__*/function () { function ReferNotifier(session, id, expires) { _classCallCheck(this, ReferNotifier); - this._session = session; this._id = id; this._expires = expires || C.expires; - this._active = true; // The creation of a Notifier results in an immediate NOTIFY. + this._active = true; + // The creation of a Notifier results in an immediate NOTIFY. this.notify(100); } - - _createClass(ReferNotifier, [{ + return _createClass(ReferNotifier, [{ key: "notify", value: function notify(code, reason) { logger.debug('notify()'); - if (this._active === false) { return; } - reason = reason || JsSIP_C.REASON_PHRASE[code] || ''; var state; - if (code >= 200) { state = 'terminated;reason=noresource'; } else { state = "active;expires=".concat(this._expires); - } // Put this in a try/catch block. - + } + // Put this in a try/catch block. this._session.sendRequest(JsSIP_C.NOTIFY, { extraHeaders: ["Event: ".concat(C.event_type, ";id=").concat(this._id), "Subscription-State: ".concat(state), "Content-Type: ".concat(C.body_type)], body: "SIP/2.0 ".concat(code, " ").concat(reason), @@ -21031,101 +17854,81 @@ module.exports = /*#__PURE__*/function () { }); } }]); - - return ReferNotifier; }(); },{"../Constants":2,"../Logger":9}],18:[function(require,module,exports){ "use strict"; -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } - -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } - -function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } - -function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - -function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - -function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } - -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } var EventEmitter = require('events').EventEmitter; - var Logger = require('../Logger'); - var JsSIP_C = require('../Constants'); - var Grammar = require('../Grammar'); - var Utils = require('../Utils'); - var logger = new Logger('RTCSession:ReferSubscriber'); - module.exports = /*#__PURE__*/function (_EventEmitter) { - _inherits(ReferSubscriber, _EventEmitter); - - var _super = _createSuper(ReferSubscriber); - function ReferSubscriber(session) { var _this; - _classCallCheck(this, ReferSubscriber); - - _this = _super.call(this); + _this = _callSuper(this, ReferSubscriber); _this._id = null; _this._session = session; return _this; } - - _createClass(ReferSubscriber, [{ + _inherits(ReferSubscriber, _EventEmitter); + return _createClass(ReferSubscriber, [{ + key: "id", + get: function get() { + return this._id; + } + }, { key: "sendRefer", value: function sendRefer(target) { var _this2 = this; - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; logger.debug('sendRefer()'); var extraHeaders = Utils.cloneArray(options.extraHeaders); - var eventHandlers = Utils.cloneObject(options.eventHandlers); // Set event handlers. + var eventHandlers = Utils.cloneObject(options.eventHandlers); + // Set event handlers. for (var event in eventHandlers) { if (Object.prototype.hasOwnProperty.call(eventHandlers, event)) { this.on(event, eventHandlers[event]); } - } // Replaces URI header field. - + } + // Replaces URI header field. var replaces = null; - if (options.replaces) { replaces = options.replaces._request.call_id; replaces += ";to-tag=".concat(options.replaces._to_tag); replaces += ";from-tag=".concat(options.replaces._from_tag); replaces = encodeURIComponent(replaces); - } // Refer-To header field. - + } + // Refer-To header field. var referTo = "Refer-To: <".concat(target).concat(replaces ? "?Replaces=".concat(replaces) : '', ">"); - extraHeaders.push(referTo); // Referred-By header field (if not already present). + extraHeaders.push(referTo); + // Referred-By header field (if not already present). if (!extraHeaders.some(function (header) { return header.toLowerCase().startsWith('referred-by:'); })) { var referredBy = "Referred-By: <".concat(this._session._ua._configuration.uri._scheme, ":").concat(this._session._ua._configuration.uri._user, "@").concat(this._session._ua._configuration.uri._host, ">"); extraHeaders.push(referredBy); } - extraHeaders.push("Contact: ".concat(this._session.contact)); - var request = this._session.sendRequest(JsSIP_C.REFER, { extraHeaders: extraHeaders, eventHandlers: { @@ -21146,25 +17949,20 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { } } }); - this._id = request.cseq; } }, { key: "receiveNotify", value: function receiveNotify(request) { logger.debug('receiveNotify()'); - if (!request.body) { return; } - var status_line = Grammar.parse(request.body.trim().split('\r\n', 1)[0], 'Status_Line'); - if (status_line === -1) { logger.debug("receiveNotify() | error parsing NOTIFY body: \"".concat(request.body, "\"")); return; } - switch (true) { case /^100$/.test(status_line.status_code): this.emit('trying', { @@ -21172,21 +17970,18 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { status_line: status_line }); break; - case /^1[0-9]{2}$/.test(status_line.status_code): this.emit('progress', { request: request, status_line: status_line }); break; - case /^2[0-9]{2}$/.test(status_line.status_code): this.emit('accepted', { request: request, status_line: status_line }); break; - default: this.emit('failed', { request: request, @@ -21214,77 +18009,75 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { cause: cause }); } - }, { - key: "id", - get: function get() { - return this._id; - } }]); - - return ReferSubscriber; }(EventEmitter); },{"../Constants":2,"../Grammar":7,"../Logger":9,"../Utils":28,"events":31}],19:[function(require,module,exports){ "use strict"; -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } var Logger = require('./Logger'); - var Utils = require('./Utils'); - var JsSIP_C = require('./Constants'); - var SIPMessage = require('./SIPMessage'); - var RequestSender = require('./RequestSender'); - var logger = new Logger('Registrator'); var MIN_REGISTER_EXPIRES = 10; // In seconds. module.exports = /*#__PURE__*/function () { function Registrator(ua, transport) { _classCallCheck(this, Registrator); - // Force reg_id to 1. this._reg_id = 1; this._ua = ua; this._transport = transport; this._registrar = ua.configuration.registrar_server; - this._expires = ua.configuration.register_expires; // Call-ID and CSeq values RFC3261 10.2. + this._expires = ua.configuration.register_expires; + // Call-ID and CSeq values RFC3261 10.2. this._call_id = Utils.createRandomToken(22); this._cseq = 0; this._to_uri = ua.configuration.uri; - this._registrationTimer = null; // Ongoing Register request. + this._registrationTimer = null; - this._registering = false; // Set status. + // Ongoing Register request. + this._registering = false; - this._registered = false; // Contact header. + // Set status. + this._registered = false; - this._contact = this._ua.contact.toString(); // Sip.ice media feature tag (RFC 5768). + // Contact header. + this._contact = this._ua.contact.toString(); - this._contact += ';+sip.ice'; // Custom headers for REGISTER and un-REGISTER. + // Sip.ice media feature tag (RFC 5768). + this._contact += ';+sip.ice'; - this._extraHeaders = []; // Custom Contact header params for REGISTER and un-REGISTER. + // Custom headers for REGISTER and un-REGISTER. + this._extraHeaders = []; - this._extraContactParams = ''; // Contents of the sip.instance Contact header parameter. + // Custom Contact header params for REGISTER and un-REGISTER. + this._extraContactParams = ''; + // Contents of the sip.instance Contact header parameter. this._sipInstance = "\"\""); this._contact += ";reg-id=".concat(this._reg_id); this._contact += ";+sip.instance=".concat(this._sipInstance); } - - _createClass(Registrator, [{ + return _createClass(Registrator, [{ + key: "registered", + get: function get() { + return this._registered; + } + }, { key: "setExtraHeaders", value: function setExtraHeaders(extraHeaders) { if (!Array.isArray(extraHeaders)) { extraHeaders = []; } - this._extraHeaders = extraHeaders.slice(); } }, { @@ -21292,16 +18085,14 @@ module.exports = /*#__PURE__*/function () { value: function setExtraContactParams(extraContactParams) { if (!(extraContactParams instanceof Object)) { extraContactParams = {}; - } // Reset it. - + } + // Reset it. this._extraContactParams = ''; - for (var param_key in extraContactParams) { if (Object.prototype.hasOwnProperty.call(extraContactParams, param_key)) { var param_value = extraContactParams[param_key]; this._extraContactParams += ";".concat(param_key); - if (param_value) { this._extraContactParams += "=".concat(param_value); } @@ -21312,20 +18103,26 @@ module.exports = /*#__PURE__*/function () { key: "register", value: function register() { var _this = this; - if (this._registering) { logger.debug('Register request in progress...'); return; } - var extraHeaders = this._extraHeaders.slice(); - extraHeaders.push("Contact: ".concat(this._contact, ";expires=").concat(this._expires).concat(this._extraContactParams)); extraHeaders.push("Expires: ".concat(this._expires)); + var fromTag = Utils.newTag(); + if (this._ua.configuration.register_from_tag_trail) { + if (typeof this._ua.configuration.register_from_tag_trail === 'function') { + fromTag += this._ua.configuration.register_from_tag_trail(); + } else { + fromTag += this._ua.configuration.register_from_tag_trail; + } + } var request = new SIPMessage.OutgoingRequest(JsSIP_C.REGISTER, this._registrar, this._ua, { 'to_uri': this._to_uri, 'call_id': this._call_id, - 'cseq': this._cseq += 1 + 'cseq': this._cseq += 1, + 'from_tag': fromTag }, extraHeaders); var request_sender = new RequestSender(this._ua, request, { onRequestTimeout: function onRequestTimeout() { @@ -21342,118 +18139,109 @@ module.exports = /*#__PURE__*/function () { // Discard responses to older REGISTER/un-REGISTER requests. if (response.cseq !== _this._cseq) { return; - } // Clear registration timer. - + } + // Clear registration timer. if (_this._registrationTimer !== null) { clearTimeout(_this._registrationTimer); _this._registrationTimer = null; } - switch (true) { case /^1[0-9]{2}$/.test(response.status_code): { // Ignore provisional responses. break; } - case /^2[0-9]{2}$/.test(response.status_code): { _this._registering = false; - if (!response.hasHeader('Contact')) { logger.debug('no Contact header in response to REGISTER, response ignored'); break; } - var contacts = response.headers['Contact'].reduce(function (a, b) { return a.concat(b.parsed); - }, []); // Get the Contact pointing to us and update the expires value accordingly. - // Try to find a matching Contact using sip.instance and reg-id. + }, []); + // Get the Contact pointing to us and update the expires value accordingly. + // Try to find a matching Contact using sip.instance and reg-id. var contact = contacts.find(function (element) { return _this._sipInstance === element.getParam('+sip.instance') && _this._reg_id === parseInt(element.getParam('reg-id')); - }); // If no match was found using the sip.instance try comparing the URIs. + }); + // If no match was found using the sip.instance try comparing the URIs. if (!contact) { contact = contacts.find(function (element) { return element.uri.user === _this._ua.contact.uri.user; }); } - if (!contact) { logger.debug('no Contact header pointing to us, response ignored'); break; } - var expires = contact.getParam('expires'); - if (!expires && response.hasHeader('expires')) { expires = response.getHeader('expires'); } - if (!expires) { expires = _this._expires; } - expires = Number(expires); if (expires < MIN_REGISTER_EXPIRES) expires = MIN_REGISTER_EXPIRES; - var timeout = expires > 64 ? expires * 1000 / 2 + Math.floor((expires / 2 - 32) * 1000 * Math.random()) : expires * 1000 - 5000; // Re-Register or emit an event before the expiration interval has elapsed. - // For that, decrease the expires value. ie: 3 seconds. + var timeout = expires > 64 ? expires * 1000 / 2 + Math.floor((expires / 2 - 32) * 1000 * Math.random()) : expires * 1000 - 5000; + // Re-Register or emit an event before the expiration interval has elapsed. + // For that, decrease the expires value. ie: 3 seconds. _this._registrationTimer = setTimeout(function () { - _this._registrationTimer = null; // If there are no listeners for registrationExpiring, renew registration. + _this._registrationTimer = null; + // If there are no listeners for registrationExpiring, renew registration. // If there are listeners, let the function listening do the register call. - if (_this._ua.listeners('registrationExpiring').length === 0) { _this.register(); } else { _this._ua.emit('registrationExpiring'); } - }, timeout); // Save gruu values. + }, timeout); + // Save gruu values. if (contact.hasParam('temp-gruu')) { _this._ua.contact.temp_gruu = contact.getParam('temp-gruu').replace(/"/g, ''); } - if (contact.hasParam('pub-gruu')) { _this._ua.contact.pub_gruu = contact.getParam('pub-gruu').replace(/"/g, ''); } - if (!_this._registered) { _this._registered = true; - _this._ua.registered({ response: response }); } - break; } - // Interval too brief RFC3261 10.2.8. + // Interval too brief RFC3261 10.2.8. case /^423$/.test(response.status_code): { if (response.hasHeader('min-expires')) { // Increase our registration interval to the suggested minimum. _this._expires = Number(response.getHeader('min-expires')); - if (_this._expires < MIN_REGISTER_EXPIRES) _this._expires = MIN_REGISTER_EXPIRES; // Attempt the registration again immediately. + if (_this._expires < MIN_REGISTER_EXPIRES) _this._expires = MIN_REGISTER_EXPIRES; + // Assure register re-try with new expire. + _this._registering = false; + + // Attempt the registration again immediately. _this.register(); } else { // This response MUST contain a Min-Expires header field. logger.debug('423 response received for REGISTER without Min-Expires'); - _this._registrationFailure(response, JsSIP_C.causes.SIP_FAILURE_CODE); } - break; } - default: { var cause = Utils.sipErrorCause(response.status_code); - _this._registrationFailure(response, cause); } } @@ -21466,29 +18254,24 @@ module.exports = /*#__PURE__*/function () { key: "unregister", value: function unregister() { var _this2 = this; - var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - if (!this._registered) { logger.debug('already unregistered'); return; } + this._registered = false; - this._registered = false; // Clear the registration timer. - + // Clear the registration timer. if (this._registrationTimer !== null) { clearTimeout(this._registrationTimer); this._registrationTimer = null; } - var extraHeaders = this._extraHeaders.slice(); - if (options.all) { extraHeaders.push("Contact: *".concat(this._extraContactParams)); } else { extraHeaders.push("Contact: ".concat(this._contact, ";expires=0").concat(this._extraContactParams)); } - extraHeaders.push('Expires: 0'); var request = new SIPMessage.OutgoingRequest(JsSIP_C.REGISTER, this._registrar, this._ua, { 'to_uri': this._to_uri, @@ -21511,16 +18294,12 @@ module.exports = /*#__PURE__*/function () { case /^1[0-9]{2}$/.test(response.status_code): // Ignore provisional responses. break; - case /^2[0-9]{2}$/.test(response.status_code): _this2._unregistered(response); - break; - default: { var cause = Utils.sipErrorCause(response.status_code); - _this2._unregistered(response, cause); } } @@ -21539,15 +18318,12 @@ module.exports = /*#__PURE__*/function () { key: "onTransportClosed", value: function onTransportClosed() { this._registering = false; - if (this._registrationTimer !== null) { clearTimeout(this._registrationTimer); this._registrationTimer = null; } - if (this._registered) { this._registered = false; - this._ua.unregistered({}); } } @@ -21555,15 +18331,12 @@ module.exports = /*#__PURE__*/function () { key: "_registrationFailure", value: function _registrationFailure(response, cause) { this._registering = false; - this._ua.registrationFailed({ response: response || null, cause: cause }); - if (this._registered) { this._registered = false; - this._ua.unregistered({ response: response || null, cause: cause @@ -21575,82 +18348,68 @@ module.exports = /*#__PURE__*/function () { value: function _unregistered(response, cause) { this._registering = false; this._registered = false; - this._ua.unregistered({ response: response || null, cause: cause || null }); } - }, { - key: "registered", - get: function get() { - return this._registered; - } }]); - - return Registrator; }(); },{"./Constants":2,"./Logger":9,"./RequestSender":20,"./SIPMessage":21,"./Utils":28}],20:[function(require,module,exports){ "use strict"; -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } var Logger = require('./Logger'); - var JsSIP_C = require('./Constants'); - var DigestAuthentication = require('./DigestAuthentication'); - var Transactions = require('./Transactions'); +var logger = new Logger('RequestSender'); -var logger = new Logger('RequestSender'); // Default event handlers. - +// Default event handlers. var EventHandlers = { onRequestTimeout: function onRequestTimeout() {}, onTransportError: function onTransportError() {}, onReceiveResponse: function onReceiveResponse() {}, onAuthenticated: function onAuthenticated() {} }; - module.exports = /*#__PURE__*/function () { function RequestSender(ua, request, eventHandlers) { _classCallCheck(this, RequestSender); - this._ua = ua; this._eventHandlers = eventHandlers; this._method = request.method; this._request = request; this._auth = null; this._challenged = false; - this._staled = false; // Define the undefined handlers. + this._staled = false; + // Define the undefined handlers. for (var handler in EventHandlers) { if (Object.prototype.hasOwnProperty.call(EventHandlers, handler)) { if (!this._eventHandlers[handler]) { this._eventHandlers[handler] = EventHandlers[handler]; } } - } // If ua is in closing process or even closed just allow sending Bye and ACK. - + } + // If ua is in closing process or even closed just allow sending Bye and ACK. if (ua.status === ua.C.STATUS_USER_CLOSED && (this._method !== JsSIP_C.BYE || this._method !== JsSIP_C.ACK)) { this._eventHandlers.onTransportError(); } } + /** * Create the client transaction and send the message. */ - - - _createClass(RequestSender, [{ + return _createClass(RequestSender, [{ key: "send", value: function send() { var _this = this; - var eventHandlers = { onRequestTimeout: function onRequestTimeout() { _this._eventHandlers.onRequestTimeout(); @@ -21662,43 +18421,38 @@ module.exports = /*#__PURE__*/function () { _this._receiveResponse(response); } }; - switch (this._method) { case 'INVITE': this.clientTransaction = new Transactions.InviteClientTransaction(this._ua, this._ua.transport, this._request, eventHandlers); break; - case 'ACK': this.clientTransaction = new Transactions.AckClientTransaction(this._ua, this._ua.transport, this._request, eventHandlers); break; - default: this.clientTransaction = new Transactions.NonInviteClientTransaction(this._ua, this._ua.transport, this._request, eventHandlers); - } // If authorization JWT is present, use it. - - + } + // If authorization JWT is present, use it. if (this._ua._configuration.authorization_jwt) { this._request.setHeader('Authorization', this._ua._configuration.authorization_jwt); } - this.clientTransaction.send(); } + /** * Called from client transaction when receiving a correct response to the request. * Authenticate request if needed or pass the response back to the applicant. */ - }, { key: "_receiveResponse", value: function _receiveResponse(response) { var challenge; var authorization_header_name; var status_code = response.status_code; + /* * Authentication * Authenticate once. _challenged_ flag used to avoid infinite authentications. */ - if ((status_code === 401 || status_code === 407) && (this._ua.configuration.password !== null || this._ua.configuration.ha1 !== null)) { // Get and parse the appropriate WWW-Authenticate or Proxy-Authenticate header. if (response.status_code === 401) { @@ -21707,17 +18461,14 @@ module.exports = /*#__PURE__*/function () { } else { challenge = response.parseHeader('proxy-authenticate'); authorization_header_name = 'proxy-authorization'; - } // Verify it seems a valid challenge. - + } + // Verify it seems a valid challenge. if (!challenge) { logger.debug("".concat(response.status_code, " with wrong or missing challenge, cannot authenticate")); - this._eventHandlers.onReceiveResponse(response); - return; } - if (!this._challenged || !this._staled && challenge.stale === true) { if (!this._auth) { this._auth = new DigestAuthentication({ @@ -21726,34 +18477,26 @@ module.exports = /*#__PURE__*/function () { realm: this._ua.configuration.realm, ha1: this._ua.configuration.ha1 }); - } // Verify that the challenge is really valid. - + } + // Verify that the challenge is really valid. if (!this._auth.authenticate(this._request, challenge)) { this._eventHandlers.onReceiveResponse(response); - return; } + this._challenged = true; - this._challenged = true; // Update ha1 and realm in the UA. - + // Update ha1 and realm in the UA. this._ua.set('realm', this._auth.get('realm')); - this._ua.set('ha1', this._auth.get('ha1')); - if (challenge.stale) { this._staled = true; } - this._request = this._request.clone(); this._request.cseq += 1; - this._request.setHeader('cseq', "".concat(this._request.cseq, " ").concat(this._method)); - this._request.setHeader(authorization_header_name, this._auth.toString()); - this._eventHandlers.onAuthenticated(this._request); - this.send(); } else { this._eventHandlers.onReceiveResponse(response); @@ -21763,53 +18506,34 @@ module.exports = /*#__PURE__*/function () { } } }]); - - return RequestSender; }(); },{"./Constants":2,"./DigestAuthentication":5,"./Logger":9,"./Transactions":24}],21:[function(require,module,exports){ "use strict"; -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } - -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } - -function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } - -function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - -function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - -function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } - -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - -function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } - -function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } - -function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; } +function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } +function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } var sdp_transform = require('sdp-transform'); - var Logger = require('./Logger'); - var JsSIP_C = require('./Constants'); - var Utils = require('./Utils'); - var NameAddrHeader = require('./NameAddrHeader'); - var Grammar = require('./Grammar'); - var logger = new Logger('SIPMessage'); + /** * -param {String} method request method * -param {String} ruri request uri @@ -21820,16 +18544,13 @@ var logger = new Logger('SIPMessage'); * -param {Object} [headers] extra headers * -param {String} [body] */ - var OutgoingRequest = /*#__PURE__*/function () { function OutgoingRequest(method, ruri, ua, params, extraHeaders, body) { _classCallCheck(this, OutgoingRequest); - // Mandatory parameters check. if (!method || !ruri || !ua) { return null; } - params = params || {}; this.ua = ua; this.headers = {}; @@ -21837,39 +18558,41 @@ var OutgoingRequest = /*#__PURE__*/function () { this.ruri = ruri; this.body = body; this.extraHeaders = Utils.cloneArray(extraHeaders); - if (this.ua.configuration.extra_headers) { this.extraHeaders = this.extraHeaders.concat(this.ua.configuration.extra_headers); - } // Fill the Common SIP Request Headers. - // Route. + } + // Fill the Common SIP Request Headers. + // Route. if (params.route_set) { this.setHeader('route', params.route_set); } else if (ua.configuration.use_preloaded_route) { this.setHeader('route', "<".concat(ua.transport.sip_uri, ";lr>")); - } // Via. - // Empty Via header. Will be filled by the client transaction. - + } - this.setHeader('via', ''); // Max-Forwards. + // Via. + // Empty Via header. Will be filled by the client transaction. + this.setHeader('via', ''); - this.setHeader('max-forwards', JsSIP_C.MAX_FORWARDS); // To + // Max-Forwards. + this.setHeader('max-forwards', JsSIP_C.MAX_FORWARDS); + // To var to_uri = params.to_uri || ruri; var to_params = params.to_tag ? { tag: params.to_tag } : null; var to_display_name = typeof params.to_display_name !== 'undefined' ? params.to_display_name : null; this.to = new NameAddrHeader(to_uri, to_display_name, to_params); - this.setHeader('to', this.to.toString()); // From. + this.setHeader('to', this.to.toString()); + // From. var from_uri = params.from_uri || ua.configuration.uri; var from_params = { tag: params.from_tag || Utils.newTag() }; var display_name; - if (typeof params.from_display_name !== 'undefined') { display_name = params.from_display_name; } else if (ua.configuration.display_name) { @@ -21877,64 +18600,58 @@ var OutgoingRequest = /*#__PURE__*/function () { } else { display_name = null; } - this.from = new NameAddrHeader(from_uri, display_name, from_params); - this.setHeader('from', this.from.toString()); // Call-ID. + this.setHeader('from', this.from.toString()); + // Call-ID. var call_id = params.call_id || ua.configuration.jssip_id + Utils.createRandomToken(15); this.call_id = call_id; - this.setHeader('call-id', call_id); // CSeq. + this.setHeader('call-id', call_id); + // CSeq. var cseq = params.cseq || Math.floor(Math.random() * 10000); this.cseq = cseq; this.setHeader('cseq', "".concat(cseq, " ").concat(method)); } + /** * Replace the the given header by the given value. * -param {String} name header name * -param {String | Array} value header value */ - - - _createClass(OutgoingRequest, [{ + return _createClass(OutgoingRequest, [{ key: "setHeader", value: function setHeader(name, value) { // Remove the header from extraHeaders if present. var regexp = new RegExp("^\\s*".concat(name, "\\s*:"), 'i'); - for (var idx = 0; idx < this.extraHeaders.length; idx++) { if (regexp.test(this.extraHeaders[idx])) { this.extraHeaders.splice(idx, 1); } } - this.headers[Utils.headerize(name)] = Array.isArray(value) ? value : [value]; } + /** * Get the value of the given header name at the given position. * -param {String} name header name * -returns {String|undefined} Returns the specified header, null if header doesn't exist. */ - }, { key: "getHeader", value: function getHeader(name) { var headers = this.headers[Utils.headerize(name)]; - if (headers) { if (headers[0]) { return headers[0]; } } else { var regexp = new RegExp("^\\s*".concat(name, "\\s*:"), 'i'); - var _iterator = _createForOfIteratorHelper(this.extraHeaders), - _step; - + _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var header = _step.value; - if (regexp.test(header)) { return header.substring(header.indexOf(':') + 1).trim(); } @@ -21945,25 +18662,22 @@ var OutgoingRequest = /*#__PURE__*/function () { _iterator.f(); } } - return; } + /** * Get the header/s of the given name. * -param {String} name header name * -returns {Array} Array with all the headers of the specified name. */ - }, { key: "getHeaders", value: function getHeaders(name) { var headers = this.headers[Utils.headerize(name)]; var result = []; - if (headers) { var _iterator2 = _createForOfIteratorHelper(headers), - _step2; - + _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var header = _step2.value; @@ -21974,18 +18688,14 @@ var OutgoingRequest = /*#__PURE__*/function () { } finally { _iterator2.f(); } - return result; } else { var regexp = new RegExp("^\\s*".concat(name, "\\s*:"), 'i'); - var _iterator3 = _createForOfIteratorHelper(this.extraHeaders), - _step3; - + _step3; try { for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { var _header = _step3.value; - if (regexp.test(_header)) { result.push(_header.substring(_header.indexOf(':') + 1).trim()); } @@ -21995,16 +18705,15 @@ var OutgoingRequest = /*#__PURE__*/function () { } finally { _iterator3.f(); } - return result; } } + /** * Verify the existence of the given header. * -param {String} name header name * -returns {boolean} true if header with given name exists, false otherwise */ - }, { key: "hasHeader", value: function hasHeader(name) { @@ -22012,14 +18721,11 @@ var OutgoingRequest = /*#__PURE__*/function () { return true; } else { var regexp = new RegExp("^\\s*".concat(name, "\\s*:"), 'i'); - var _iterator4 = _createForOfIteratorHelper(this.extraHeaders), - _step4; - + _step4; try { for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { var header = _step4.value; - if (regexp.test(header)) { return true; } @@ -22030,9 +18736,9 @@ var OutgoingRequest = /*#__PURE__*/function () { _iterator4.f(); } } - return false; } + /** * Parse the current body as a SDP and store the resulting object * into this.sdp. @@ -22040,7 +18746,6 @@ var OutgoingRequest = /*#__PURE__*/function () { * * Returns this.sdp. */ - }, { key: "parseSDP", value: function parseSDP(force) { @@ -22055,12 +18760,10 @@ var OutgoingRequest = /*#__PURE__*/function () { key: "toString", value: function toString() { var msg = "".concat(this.method, " ").concat(this.ruri, " SIP/2.0\r\n"); - for (var headerName in this.headers) { if (Object.prototype.hasOwnProperty.call(this.headers, headerName)) { var _iterator5 = _createForOfIteratorHelper(this.headers[headerName]), - _step5; - + _step5; try { for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) { var headerValue = _step5.value; @@ -22073,57 +18776,48 @@ var OutgoingRequest = /*#__PURE__*/function () { } } } - var _iterator6 = _createForOfIteratorHelper(this.extraHeaders), - _step6; - + _step6; try { for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) { var header = _step6.value; msg += "".concat(header.trim(), "\r\n"); - } // Supported. + } + // Supported. } catch (err) { _iterator6.e(err); } finally { _iterator6.f(); } - var supported = []; - switch (this.method) { case JsSIP_C.REGISTER: supported.push('path', 'gruu'); break; - case JsSIP_C.INVITE: if (this.ua.configuration.session_timers) { supported.push('timer'); } - if (this.ua.contact.pub_gruu || this.ua.contact.temp_gruu) { supported.push('gruu'); } - supported.push('ice', 'replaces'); break; - case JsSIP_C.UPDATE: if (this.ua.configuration.session_timers) { supported.push('timer'); } - supported.push('ice'); break; } - supported.push('outbound'); - var userAgent = this.ua.configuration.user_agent || JsSIP_C.USER_AGENT; // Allow. + var userAgent = this.ua.configuration.user_agent || JsSIP_C.USER_AGENT; + // Allow. msg += "Allow: ".concat(JsSIP_C.ALLOWED_METHODS, "\r\n"); msg += "Supported: ".concat(supported, "\r\n"); msg += "User-Agent: ".concat(userAgent, "\r\n"); - if (this.body) { var length = Utils.str_utf8_length(this.body); msg += "Content-Length: ".concat(length, "\r\n\r\n"); @@ -22131,7 +18825,6 @@ var OutgoingRequest = /*#__PURE__*/function () { } else { msg += 'Content-Length: 0\r\n\r\n'; } - return msg; } }, { @@ -22150,26 +18843,17 @@ var OutgoingRequest = /*#__PURE__*/function () { return request; } }]); - - return OutgoingRequest; }(); - var InitialOutgoingInviteRequest = /*#__PURE__*/function (_OutgoingRequest) { - _inherits(InitialOutgoingInviteRequest, _OutgoingRequest); - - var _super = _createSuper(InitialOutgoingInviteRequest); - function InitialOutgoingInviteRequest(ruri, ua, params, extraHeaders, body) { var _this; - _classCallCheck(this, InitialOutgoingInviteRequest); - - _this = _super.call(this, JsSIP_C.INVITE, ruri, ua, params, extraHeaders, body); + _this = _callSuper(this, InitialOutgoingInviteRequest, [JsSIP_C.INVITE, ruri, ua, params, extraHeaders, body]); _this.transaction = null; return _this; } - - _createClass(InitialOutgoingInviteRequest, [{ + _inherits(InitialOutgoingInviteRequest, _OutgoingRequest); + return _createClass(InitialOutgoingInviteRequest, [{ key: "cancel", value: function cancel(reason) { this.transaction.cancel(reason); @@ -22191,14 +18875,10 @@ var InitialOutgoingInviteRequest = /*#__PURE__*/function (_OutgoingRequest) { return request; } }]); - - return InitialOutgoingInviteRequest; }(OutgoingRequest); - var IncomingMessage = /*#__PURE__*/function () { function IncomingMessage() { _classCallCheck(this, IncomingMessage); - this.data = null; this.headers = null; this.method = null; @@ -22213,35 +18893,32 @@ var IncomingMessage = /*#__PURE__*/function () { this.body = null; this.sdp = null; } + /** * Insert a header of the given name and value into the last position of the * header array. */ - - - _createClass(IncomingMessage, [{ + return _createClass(IncomingMessage, [{ key: "addHeader", value: function addHeader(name, value) { var header = { raw: value }; name = Utils.headerize(name); - if (this.headers[name]) { this.headers[name].push(header); } else { this.headers[name] = [header]; } } + /** * Get the value of the given header name at the given position. */ - }, { key: "getHeader", value: function getHeader(name) { var header = this.headers[Utils.headerize(name)]; - if (header) { if (header[0]) { return header[0].raw; @@ -22250,23 +18927,20 @@ var IncomingMessage = /*#__PURE__*/function () { return; } } + /** * Get the header/s of the given name. */ - }, { key: "getHeaders", value: function getHeaders(name) { var headers = this.headers[Utils.headerize(name)]; var result = []; - if (!headers) { return []; } - var _iterator7 = _createForOfIteratorHelper(headers), - _step7; - + _step7; try { for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) { var header = _step7.value; @@ -22277,18 +18951,18 @@ var IncomingMessage = /*#__PURE__*/function () { } finally { _iterator7.f(); } - return result; } + /** * Verify the existence of the given header. */ - }, { key: "hasHeader", value: function hasHeader(name) { return this.headers[Utils.headerize(name)] ? true : false; } + /** * Parse the given header on the given index. * -param {String} name header name @@ -22296,13 +18970,11 @@ var IncomingMessage = /*#__PURE__*/function () { * -returns {Object|undefined} Parsed header object, undefined if the header * is not present or in case of a parsing error. */ - }, { key: "parseHeader", value: function parseHeader(name) { var idx = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; name = Utils.headerize(name); - if (!this.headers[name]) { logger.debug("header \"".concat(name, "\" not present")); return; @@ -22310,20 +18982,16 @@ var IncomingMessage = /*#__PURE__*/function () { logger.debug("not so many \"".concat(name, "\" headers present")); return; } - var header = this.headers[name][idx]; var value = header.raw; - if (header.parsed) { return header.parsed; - } // Substitute '-' by '_' for grammar rule matching. - + } + // Substitute '-' by '_' for grammar rule matching. var parsed = Grammar.parse(value, name.replace(/-/g, '_')); - if (parsed === -1) { this.headers[name].splice(idx, 1); // delete from headers - logger.debug("error parsing \"".concat(name, "\" header field with value \"").concat(value, "\"")); return; } else { @@ -22331,6 +18999,7 @@ var IncomingMessage = /*#__PURE__*/function () { return parsed; } } + /** * Message Header attribute selector. Alias of parseHeader. * -param {String} name header name @@ -22341,18 +19010,17 @@ var IncomingMessage = /*#__PURE__*/function () { * -example * message.s('via',3).port */ - }, { key: "s", value: function s(name, idx) { return this.parseHeader(name, idx); } + /** * Replace the value of the given header by the value. * -param {String} name header name * -param {String} value header value */ - }, { key: "setHeader", value: function setHeader(name, value) { @@ -22361,6 +19029,7 @@ var IncomingMessage = /*#__PURE__*/function () { }; this.headers[Utils.headerize(name)] = [header]; } + /** * Parse the current body as a SDP and store the resulting object * into this.sdp. @@ -22368,7 +19037,6 @@ var IncomingMessage = /*#__PURE__*/function () { * * Returns this.sdp. */ - }, { key: "parseSDP", value: function parseSDP(force) { @@ -22385,21 +19053,12 @@ var IncomingMessage = /*#__PURE__*/function () { return this.data; } }]); - - return IncomingMessage; }(); - var IncomingRequest = /*#__PURE__*/function (_IncomingMessage) { - _inherits(IncomingRequest, _IncomingMessage); - - var _super2 = _createSuper(IncomingRequest); - function IncomingRequest(ua) { var _this2; - _classCallCheck(this, IncomingRequest); - - _this2 = _super2.call(this); + _this2 = _callSuper(this, IncomingRequest); _this2.ua = ua; _this2.headers = {}; _this2.ruri = null; @@ -22407,6 +19066,7 @@ var IncomingRequest = /*#__PURE__*/function (_IncomingMessage) { _this2.server_transaction = null; return _this2; } + /** * Stateful reply. * -param {Number} code status code @@ -22416,37 +19076,31 @@ var IncomingRequest = /*#__PURE__*/function (_IncomingMessage) { * -param {Function} [onSuccess] onSuccess callback * -param {Function} [onFailure] onFailure callback */ - - - _createClass(IncomingRequest, [{ + _inherits(IncomingRequest, _IncomingMessage); + return _createClass(IncomingRequest, [{ key: "reply", value: function reply(code, reason, extraHeaders, body, onSuccess, onFailure) { var supported = []; var to = this.getHeader('To'); code = code || null; - reason = reason || null; // Validate code and reason values. + reason = reason || null; + // Validate code and reason values. if (!code || code < 100 || code > 699) { throw new TypeError("Invalid status_code: ".concat(code)); } else if (reason && typeof reason !== 'string' && !(reason instanceof String)) { throw new TypeError("Invalid reason_phrase: ".concat(reason)); } - reason = reason || JsSIP_C.REASON_PHRASE[code] || ''; extraHeaders = Utils.cloneArray(extraHeaders); - if (this.ua.configuration.extra_headers) { extraHeaders = extraHeaders.concat(this.ua.configuration.extra_headers); } - var response = "SIP/2.0 ".concat(code, " ").concat(reason, "\r\n"); - if (this.method === JsSIP_C.INVITE && code > 100 && code <= 200) { var headers = this.getHeaders('record-route'); - var _iterator8 = _createForOfIteratorHelper(headers), - _step8; - + _step8; try { for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) { var header = _step8.value; @@ -22458,12 +19112,9 @@ var IncomingRequest = /*#__PURE__*/function (_IncomingMessage) { _iterator8.f(); } } - var vias = this.getHeaders('via'); - var _iterator9 = _createForOfIteratorHelper(vias), - _step9; - + _step9; try { for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) { var via = _step9.value; @@ -22474,60 +19125,51 @@ var IncomingRequest = /*#__PURE__*/function (_IncomingMessage) { } finally { _iterator9.f(); } - if (!this.to_tag && code > 100) { to += ";tag=".concat(Utils.newTag()); } else if (this.to_tag && !this.s('to').hasParam('tag')) { to += ";tag=".concat(this.to_tag); } - response += "To: ".concat(to, "\r\n"); response += "From: ".concat(this.getHeader('From'), "\r\n"); response += "Call-ID: ".concat(this.call_id, "\r\n"); response += "CSeq: ".concat(this.cseq, " ").concat(this.method, "\r\n"); - var _iterator10 = _createForOfIteratorHelper(extraHeaders), - _step10; - + _step10; try { for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) { var _header2 = _step10.value; response += "".concat(_header2.trim(), "\r\n"); - } // Supported. + } + // Supported. } catch (err) { _iterator10.e(err); } finally { _iterator10.f(); } - switch (this.method) { case JsSIP_C.INVITE: if (this.ua.configuration.session_timers) { supported.push('timer'); } - if (this.ua.contact.pub_gruu || this.ua.contact.temp_gruu) { supported.push('gruu'); } - supported.push('ice', 'replaces'); break; - case JsSIP_C.UPDATE: if (this.ua.configuration.session_timers) { supported.push('timer'); } - if (body) { supported.push('ice'); } - supported.push('replaces'); } + supported.push('outbound'); - supported.push('outbound'); // Allow and Accept. - + // Allow and Accept. if (this.method === JsSIP_C.OPTIONS) { response += "Allow: ".concat(JsSIP_C.ALLOWED_METHODS, "\r\n"); response += "Accept: ".concat(JsSIP_C.ACCEPTED_BODY_TYPES, "\r\n"); @@ -22536,9 +19178,7 @@ var IncomingRequest = /*#__PURE__*/function (_IncomingMessage) { } else if (code === 415) { response += "Accept: ".concat(JsSIP_C.ACCEPTED_BODY_TYPES, "\r\n"); } - response += "Supported: ".concat(supported, "\r\n"); - if (body) { var length = Utils.str_utf8_length(body); response += 'Content-Type: application/sdp\r\n'; @@ -22547,34 +19187,31 @@ var IncomingRequest = /*#__PURE__*/function (_IncomingMessage) { } else { response += "Content-Length: ".concat(0, "\r\n\r\n"); } - this.server_transaction.receiveResponse(code, response, onSuccess, onFailure); } + /** * Stateless reply. * -param {Number} code status code * -param {String} reason reason phrase */ - }, { key: "reply_sl", value: function reply_sl() { var code = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; var reason = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - var vias = this.getHeaders('via'); // Validate code and reason values. + var vias = this.getHeaders('via'); + // Validate code and reason values. if (!code || code < 100 || code > 699) { throw new TypeError("Invalid status_code: ".concat(code)); } else if (reason && typeof reason !== 'string' && !(reason instanceof String)) { throw new TypeError("Invalid reason_phrase: ".concat(reason)); } - reason = reason || JsSIP_C.REASON_PHRASE[code] || ''; var response = "SIP/2.0 ".concat(code, " ").concat(reason, "\r\n"); - var _iterator11 = _createForOfIteratorHelper(vias), - _step11; - + _step11; try { for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) { var via = _step11.value; @@ -22585,24 +19222,19 @@ var IncomingRequest = /*#__PURE__*/function (_IncomingMessage) { } finally { _iterator11.f(); } - var to = this.getHeader('To'); - if (!this.to_tag && code > 100) { to += ";tag=".concat(Utils.newTag()); } else if (this.to_tag && !this.s('to').hasParam('tag')) { to += ";tag=".concat(this.to_tag); } - response += "To: ".concat(to, "\r\n"); response += "From: ".concat(this.getHeader('From'), "\r\n"); response += "Call-ID: ".concat(this.call_id, "\r\n"); response += "CSeq: ".concat(this.cseq, " ").concat(this.method, "\r\n"); - if (this.ua.configuration.extra_headers) { var _iterator12 = _createForOfIteratorHelper(this.ua.configuration.extra_headers), - _step12; - + _step12; try { for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) { var header = _step12.value; @@ -22614,35 +19246,24 @@ var IncomingRequest = /*#__PURE__*/function (_IncomingMessage) { _iterator12.f(); } } - response += "Content-Length: ".concat(0, "\r\n\r\n"); this.transport.send(response); } }]); - - return IncomingRequest; }(IncomingMessage); - var IncomingResponse = /*#__PURE__*/function (_IncomingMessage2) { - _inherits(IncomingResponse, _IncomingMessage2); - - var _super3 = _createSuper(IncomingResponse); - function IncomingResponse() { var _this3; - _classCallCheck(this, IncomingResponse); - - _this3 = _super3.call(this); + _this3 = _callSuper(this, IncomingResponse); _this3.headers = {}; _this3.status_code = null; _this3.reason_phrase = null; return _this3; } - - return IncomingResponse; + _inherits(IncomingResponse, _IncomingMessage2); + return _createClass(IncomingResponse); }(IncomingMessage); - module.exports = { OutgoingRequest: OutgoingRequest, InitialOutgoingInviteRequest: InitialOutgoingInviteRequest, @@ -22653,12 +19274,10 @@ module.exports = { "use strict"; var Logger = require('./Logger'); - var Utils = require('./Utils'); - var Grammar = require('./Grammar'); - var logger = new Logger('Socket'); + /** * Interface documentation: https://jssip.net/documentation/$last_version/api/socket/ * @@ -22683,33 +19302,30 @@ exports.isSocket = function (socket) { if (Array.isArray(socket)) { return false; } - if (typeof socket === 'undefined') { logger.warn('undefined JsSIP.Socket instance'); return false; - } // Check Properties. - + } + // Check Properties. try { if (!Utils.isString(socket.url)) { logger.warn('missing or invalid JsSIP.Socket url property'); throw new Error('Missing or invalid JsSIP.Socket url property'); } - if (!Utils.isString(socket.via_transport)) { logger.warn('missing or invalid JsSIP.Socket via_transport property'); throw new Error('Missing or invalid JsSIP.Socket via_transport property'); } - if (Grammar.parse(socket.sip_uri, 'SIP_URI') === -1) { logger.warn('missing or invalid JsSIP.Socket sip_uri property'); throw new Error('missing or invalid JsSIP.Socket sip_uri property'); } } catch (e) { return false; - } // Check Methods. - + } + // Check Methods. try { ['connect', 'disconnect', 'send'].forEach(function (method) { if (!Utils.isFunction(socket[method])) { @@ -22720,15 +19336,14 @@ exports.isSocket = function (socket) { } catch (e) { return false; } - return true; }; },{"./Grammar":7,"./Logger":9,"./Utils":28}],23:[function(require,module,exports){ "use strict"; var T1 = 500, - T2 = 4000, - T4 = 5000; + T2 = 4000, + T4 = 5000; module.exports = { T1: T1, T2: T2, @@ -22743,43 +19358,28 @@ module.exports = { TIMER_L: 64 * T1, TIMER_M: 64 * T1, PROVISIONAL_RESPONSE_INTERVAL: 60000 // See RFC 3261 Section 13.3.1.1 - }; },{}],24:[function(require,module,exports){ "use strict"; -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } - -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } - -function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } - -function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - -function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - -function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } - -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } var EventEmitter = require('events').EventEmitter; - var Logger = require('./Logger'); - var JsSIP_C = require('./Constants'); - var SIPMessage = require('./SIPMessage'); - var Timers = require('./Timers'); - var loggernict = new Logger('NonInviteClientTransaction'); var loggerict = new Logger('InviteClientTransaction'); var loggeract = new Logger('AckClientTransaction'); @@ -22800,18 +19400,11 @@ var C = { INVITE_CLIENT: 'ict', INVITE_SERVER: 'ist' }; - var NonInviteClientTransaction = /*#__PURE__*/function (_EventEmitter) { - _inherits(NonInviteClientTransaction, _EventEmitter); - - var _super = _createSuper(NonInviteClientTransaction); - function NonInviteClientTransaction(ua, transport, request, eventHandlers) { var _this; - _classCallCheck(this, NonInviteClientTransaction); - - _this = _super.call(this); + _this = _callSuper(this, NonInviteClientTransaction); _this.type = C.NON_INVITE_CLIENT; _this.id = "z9hG4bK".concat(Math.floor(Math.random() * 10000000)); _this.ua = ua; @@ -22820,15 +19413,17 @@ var NonInviteClientTransaction = /*#__PURE__*/function (_EventEmitter) { _this.eventHandlers = eventHandlers; var via = "SIP/2.0/".concat(transport.via_transport); via += " ".concat(ua.configuration.via_host, ";branch=").concat(_this.id); - _this.request.setHeader('via', via); - - _this.ua.newTransaction(_assertThisInitialized(_this)); - + _this.ua.newTransaction(_this); return _this; } - - _createClass(NonInviteClientTransaction, [{ + _inherits(NonInviteClientTransaction, _EventEmitter); + return _createClass(NonInviteClientTransaction, [{ + key: "C", + get: function get() { + return C; + } + }, { key: "stateChanged", value: function stateChanged(state) { this.state = state; @@ -22838,12 +19433,10 @@ var NonInviteClientTransaction = /*#__PURE__*/function (_EventEmitter) { key: "send", value: function send() { var _this2 = this; - this.stateChanged(C.STATUS_TRYING); this.F = setTimeout(function () { _this2.timer_F(); }, Timers.TIMER_F); - if (!this.transport.send(this.request)) { this.onTransportError(); } @@ -22876,9 +19469,7 @@ var NonInviteClientTransaction = /*#__PURE__*/function (_EventEmitter) { key: "receiveResponse", value: function receiveResponse(response) { var _this3 = this; - var status_code = response.status_code; - if (status_code < 200) { switch (this.state) { case C.STATUS_TRYING: @@ -22893,63 +19484,48 @@ var NonInviteClientTransaction = /*#__PURE__*/function (_EventEmitter) { case C.STATUS_PROCEEDING: this.stateChanged(C.STATUS_COMPLETED); clearTimeout(this.F); - if (status_code === 408) { this.eventHandlers.onRequestTimeout(); } else { this.eventHandlers.onReceiveResponse(response); } - this.K = setTimeout(function () { _this3.timer_K(); }, Timers.TIMER_K); break; - case C.STATUS_COMPLETED: break; } } } - }, { - key: "C", - get: function get() { - return C; - } }]); - - return NonInviteClientTransaction; }(EventEmitter); - var InviteClientTransaction = /*#__PURE__*/function (_EventEmitter2) { - _inherits(InviteClientTransaction, _EventEmitter2); - - var _super2 = _createSuper(InviteClientTransaction); - function InviteClientTransaction(ua, transport, request, eventHandlers) { var _this4; - _classCallCheck(this, InviteClientTransaction); - - _this4 = _super2.call(this); + _this4 = _callSuper(this, InviteClientTransaction); _this4.type = C.INVITE_CLIENT; _this4.id = "z9hG4bK".concat(Math.floor(Math.random() * 10000000)); _this4.ua = ua; _this4.transport = transport; _this4.request = request; _this4.eventHandlers = eventHandlers; - request.transaction = _assertThisInitialized(_this4); + request.transaction = _this4; var via = "SIP/2.0/".concat(transport.via_transport); via += " ".concat(ua.configuration.via_host, ";branch=").concat(_this4.id); - _this4.request.setHeader('via', via); - - _this4.ua.newTransaction(_assertThisInitialized(_this4)); - + _this4.ua.newTransaction(_this4); return _this4; } - - _createClass(InviteClientTransaction, [{ - key: "stateChanged", + _inherits(InviteClientTransaction, _EventEmitter2); + return _createClass(InviteClientTransaction, [{ + key: "C", + get: function get() { + return C; + } + }, { + key: "stateChanged", value: function stateChanged(state) { this.state = state; this.emit('stateChanged'); @@ -22958,12 +19534,10 @@ var InviteClientTransaction = /*#__PURE__*/function (_EventEmitter2) { key: "send", value: function send() { var _this5 = this; - this.stateChanged(C.STATUS_CALLING); this.B = setTimeout(function () { _this5.timer_B(); }, Timers.TIMER_B); - if (!this.transport.send(this.request)) { this.onTransportError(); } @@ -22974,33 +19548,31 @@ var InviteClientTransaction = /*#__PURE__*/function (_EventEmitter2) { clearTimeout(this.B); clearTimeout(this.D); clearTimeout(this.M); - if (this.state !== C.STATUS_ACCEPTED) { loggerict.debug("transport error occurred, deleting transaction ".concat(this.id)); this.eventHandlers.onTransportError(); } - this.stateChanged(C.STATUS_TERMINATED); this.ua.destroyTransaction(this); - } // RFC 6026 7.2. + } + // RFC 6026 7.2. }, { key: "timer_M", value: function timer_M() { loggerict.debug("Timer M expired for transaction ".concat(this.id)); - if (this.state === C.STATUS_ACCEPTED) { clearTimeout(this.B); this.stateChanged(C.STATUS_TERMINATED); this.ua.destroyTransaction(this); } - } // RFC 3261 17.1.1. + } + // RFC 3261 17.1.1. }, { key: "timer_B", value: function timer_B() { loggerict.debug("Timer B expired for transaction ".concat(this.id)); - if (this.state === C.STATUS_CALLING) { this.stateChanged(C.STATUS_TERMINATED); this.ua.destroyTransaction(this); @@ -23019,7 +19591,6 @@ var InviteClientTransaction = /*#__PURE__*/function (_EventEmitter2) { key: "sendACK", value: function sendACK(response) { var _this6 = this; - var ack = new SIPMessage.OutgoingRequest(JsSIP_C.ACK, this.request.ruri, this.ua, { 'route_set': this.request.getHeaders('route'), 'call_id': this.request.getHeader('call-id'), @@ -23040,7 +19611,6 @@ var InviteClientTransaction = /*#__PURE__*/function (_EventEmitter2) { if (this.state !== C.STATUS_PROCEEDING) { return; } - var cancel = new SIPMessage.OutgoingRequest(JsSIP_C.CANCEL, this.request.ruri, this.ua, { 'route_set': this.request.getHeaders('route'), 'call_id': this.request.getHeader('call-id'), @@ -23049,27 +19619,22 @@ var InviteClientTransaction = /*#__PURE__*/function (_EventEmitter2) { cancel.setHeader('from', this.request.getHeader('from')); cancel.setHeader('via', this.request.getHeader('via')); cancel.setHeader('to', this.request.getHeader('to')); - if (reason) { cancel.setHeader('reason', reason); } - this.transport.send(cancel); } }, { key: "receiveResponse", value: function receiveResponse(response) { var _this7 = this; - var status_code = response.status_code; - if (status_code >= 100 && status_code <= 199) { switch (this.state) { case C.STATUS_CALLING: this.stateChanged(C.STATUS_PROCEEDING); this.eventHandlers.onReceiveResponse(response); break; - case C.STATUS_PROCEEDING: this.eventHandlers.onReceiveResponse(response); break; @@ -23084,7 +19649,6 @@ var InviteClientTransaction = /*#__PURE__*/function (_EventEmitter2) { }, Timers.TIMER_M); this.eventHandlers.onReceiveResponse(response); break; - case C.STATUS_ACCEPTED: this.eventHandlers.onReceiveResponse(response); break; @@ -23097,47 +19661,35 @@ var InviteClientTransaction = /*#__PURE__*/function (_EventEmitter2) { this.sendACK(response); this.eventHandlers.onReceiveResponse(response); break; - case C.STATUS_COMPLETED: this.sendACK(response); break; } } } - }, { - key: "C", - get: function get() { - return C; - } }]); - - return InviteClientTransaction; }(EventEmitter); - var AckClientTransaction = /*#__PURE__*/function (_EventEmitter3) { - _inherits(AckClientTransaction, _EventEmitter3); - - var _super3 = _createSuper(AckClientTransaction); - function AckClientTransaction(ua, transport, request, eventHandlers) { var _this8; - _classCallCheck(this, AckClientTransaction); - - _this8 = _super3.call(this); + _this8 = _callSuper(this, AckClientTransaction); _this8.id = "z9hG4bK".concat(Math.floor(Math.random() * 10000000)); _this8.transport = transport; _this8.request = request; _this8.eventHandlers = eventHandlers; var via = "SIP/2.0/".concat(transport.via_transport); via += " ".concat(ua.configuration.via_host, ";branch=").concat(_this8.id); - _this8.request.setHeader('via', via); - return _this8; } - - _createClass(AckClientTransaction, [{ + _inherits(AckClientTransaction, _EventEmitter3); + return _createClass(AckClientTransaction, [{ + key: "C", + get: function get() { + return C; + } + }, { key: "send", value: function send() { if (!this.transport.send(this.request)) { @@ -23150,40 +19702,31 @@ var AckClientTransaction = /*#__PURE__*/function (_EventEmitter3) { loggeract.debug("transport error occurred for transaction ".concat(this.id)); this.eventHandlers.onTransportError(); } - }, { - key: "C", - get: function get() { - return C; - } }]); - - return AckClientTransaction; }(EventEmitter); - var NonInviteServerTransaction = /*#__PURE__*/function (_EventEmitter4) { - _inherits(NonInviteServerTransaction, _EventEmitter4); - - var _super4 = _createSuper(NonInviteServerTransaction); - function NonInviteServerTransaction(ua, transport, request) { var _this9; - _classCallCheck(this, NonInviteServerTransaction); - - _this9 = _super4.call(this); + _this9 = _callSuper(this, NonInviteServerTransaction); _this9.type = C.NON_INVITE_SERVER; _this9.id = request.via_branch; _this9.ua = ua; _this9.transport = transport; _this9.request = request; _this9.last_response = ''; - request.server_transaction = _assertThisInitialized(_this9); + request.server_transaction = _this9; _this9.state = C.STATUS_TRYING; - ua.newTransaction(_assertThisInitialized(_this9)); + ua.newTransaction(_this9); return _this9; } - - _createClass(NonInviteServerTransaction, [{ + _inherits(NonInviteServerTransaction, _EventEmitter4); + return _createClass(NonInviteServerTransaction, [{ + key: "C", + get: function get() { + return C; + } + }, { key: "stateChanged", value: function stateChanged(state) { this.state = state; @@ -23211,7 +19754,6 @@ var NonInviteServerTransaction = /*#__PURE__*/function (_EventEmitter4) { key: "receiveResponse", value: function receiveResponse(status_code, response, onSuccess, onFailure) { var _this10 = this; - if (status_code === 100) { /* RFC 4320 4.1 * 'A SIP element MUST NOT @@ -23221,26 +19763,20 @@ var NonInviteServerTransaction = /*#__PURE__*/function (_EventEmitter4) { switch (this.state) { case C.STATUS_TRYING: this.stateChanged(C.STATUS_PROCEEDING); - if (!this.transport.send(response)) { this.onTransportError(); } - break; - case C.STATUS_PROCEEDING: this.last_response = response; - if (!this.transport.send(response)) { this.onTransportError(); - if (onFailure) { onFailure(); } } else if (onSuccess) { onSuccess(); } - break; } } else if (status_code >= 200 && status_code <= 699) { @@ -23252,60 +19788,47 @@ var NonInviteServerTransaction = /*#__PURE__*/function (_EventEmitter4) { this.J = setTimeout(function () { _this10.timer_J(); }, Timers.TIMER_J); - if (!this.transport.send(response)) { this.onTransportError(); - if (onFailure) { onFailure(); } } else if (onSuccess) { onSuccess(); } - break; - case C.STATUS_COMPLETED: break; } } } - }, { - key: "C", - get: function get() { - return C; - } }]); - - return NonInviteServerTransaction; }(EventEmitter); - var InviteServerTransaction = /*#__PURE__*/function (_EventEmitter5) { - _inherits(InviteServerTransaction, _EventEmitter5); - - var _super5 = _createSuper(InviteServerTransaction); - function InviteServerTransaction(ua, transport, request) { var _this11; - _classCallCheck(this, InviteServerTransaction); - - _this11 = _super5.call(this); + _this11 = _callSuper(this, InviteServerTransaction); _this11.type = C.INVITE_SERVER; _this11.id = request.via_branch; _this11.ua = ua; _this11.transport = transport; _this11.request = request; _this11.last_response = ''; - request.server_transaction = _assertThisInitialized(_this11); + request.server_transaction = _this11; _this11.state = C.STATUS_PROCEEDING; - ua.newTransaction(_assertThisInitialized(_this11)); + ua.newTransaction(_this11); _this11.resendProvisionalTimer = null; request.reply(100); return _this11; } - - _createClass(InviteServerTransaction, [{ + _inherits(InviteServerTransaction, _EventEmitter5); + return _createClass(InviteServerTransaction, [{ + key: "C", + get: function get() { + return C; + } + }, { key: "stateChanged", value: function stateChanged(state) { this.state = state; @@ -23315,11 +19838,9 @@ var InviteServerTransaction = /*#__PURE__*/function (_EventEmitter5) { key: "timer_H", value: function timer_H() { loggerist.debug("Timer H expired for transaction ".concat(this.id)); - if (this.state === C.STATUS_COMPLETED) { loggerist.debug('ACK not received, dialog will be terminated'); } - this.stateChanged(C.STATUS_TERMINATED); this.ua.destroyTransaction(this); } @@ -23328,13 +19849,13 @@ var InviteServerTransaction = /*#__PURE__*/function (_EventEmitter5) { value: function timer_I() { this.stateChanged(C.STATUS_TERMINATED); this.ua.destroyTransaction(this); - } // RFC 6026 7.1. + } + // RFC 6026 7.1. }, { key: "timer_L", value: function timer_L() { loggerist.debug("Timer L expired for transaction ".concat(this.id)); - if (this.state === C.STATUS_ACCEPTED) { this.stateChanged(C.STATUS_TERMINATED); this.ua.destroyTransaction(this); @@ -23346,12 +19867,10 @@ var InviteServerTransaction = /*#__PURE__*/function (_EventEmitter5) { if (!this.transportError) { this.transportError = true; loggerist.debug("transport error occurred, deleting transaction ".concat(this.id)); - if (this.resendProvisionalTimer !== null) { clearInterval(this.resendProvisionalTimer); this.resendProvisionalTimer = null; } - clearTimeout(this.L); clearTimeout(this.H); clearTimeout(this.I); @@ -23365,25 +19884,23 @@ var InviteServerTransaction = /*#__PURE__*/function (_EventEmitter5) { if (!this.transport.send(this.last_response)) { this.onTransportError(); } - } // INVITE Server Transaction RFC 3261 17.2.1. + } + // INVITE Server Transaction RFC 3261 17.2.1. }, { key: "receiveResponse", value: function receiveResponse(status_code, response, onSuccess, onFailure) { var _this12 = this; - if (status_code >= 100 && status_code <= 199) { switch (this.state) { case C.STATUS_PROCEEDING: if (!this.transport.send(response)) { this.onTransportError(); } - this.last_response = response; break; } } - if (status_code > 100 && status_code <= 199 && this.state === C.STATUS_PROCEEDING) { // Trigger the resendProvisionalTimer only for the first non 100 provisional response. if (this.resendProvisionalTimer === null) { @@ -23399,26 +19916,22 @@ var InviteServerTransaction = /*#__PURE__*/function (_EventEmitter5) { this.L = setTimeout(function () { _this12.timer_L(); }, Timers.TIMER_L); - if (this.resendProvisionalTimer !== null) { clearInterval(this.resendProvisionalTimer); this.resendProvisionalTimer = null; } /* falls through */ - case C.STATUS_ACCEPTED: // Note that this point will be reached for proceeding this.state also. if (!this.transport.send(response)) { this.onTransportError(); - if (onFailure) { onFailure(); } } else if (onSuccess) { onSuccess(); } - break; } } else if (status_code >= 300 && status_code <= 699) { @@ -23428,10 +19941,8 @@ var InviteServerTransaction = /*#__PURE__*/function (_EventEmitter5) { clearInterval(this.resendProvisionalTimer); this.resendProvisionalTimer = null; } - if (!this.transport.send(response)) { this.onTransportError(); - if (onFailure) { onFailure(); } @@ -23440,24 +19951,15 @@ var InviteServerTransaction = /*#__PURE__*/function (_EventEmitter5) { this.H = setTimeout(function () { _this12.timer_H(); }, Timers.TIMER_H); - if (onSuccess) { onSuccess(); } } - break; } } } - }, { - key: "C", - get: function get() { - return C; - } }]); - - return InviteServerTransaction; }(EventEmitter); /** * INVITE: @@ -23477,36 +19979,30 @@ var InviteServerTransaction = /*#__PURE__*/function (_EventEmitter5) { * _true_ retransmission * _false_ new request */ - - function checkTransaction(_ref, request) { var _transactions = _ref._transactions; var tr; - switch (request.method) { case JsSIP_C.INVITE: tr = _transactions.ist[request.via_branch]; - if (tr) { switch (tr.state) { case C.STATUS_PROCEEDING: tr.transport.send(tr.last_response); break; + // RFC 6026 7.1 Invite retransmission. // Received while in C.STATUS_ACCEPTED state. Absorb it. - case C.STATUS_ACCEPTED: break; } - return true; } - break; - case JsSIP_C.ACK: - tr = _transactions.ist[request.via_branch]; // RFC 6026 7.1. + tr = _transactions.ist[request.via_branch]; + // RFC 6026 7.1. if (tr) { if (tr.state === C.STATUS_ACCEPTED) { return false; @@ -23517,19 +20013,16 @@ function checkTransaction(_ref, request) { }, Timers.TIMER_I); return true; } - } // ACK to 2XX Response. + } + // ACK to 2XX Response. else { - return false; - } - + return false; + } break; - case JsSIP_C.CANCEL: tr = _transactions.ist[request.via_branch]; - if (tr) { request.reply_sl(200); - if (tr.state === C.STATUS_PROCEEDING) { return false; } else { @@ -23539,29 +20032,23 @@ function checkTransaction(_ref, request) { request.reply_sl(481); return true; } - default: // Non-INVITE Server Transaction RFC 3261 17.2.2. tr = _transactions.nist[request.via_branch]; - if (tr) { switch (tr.state) { case C.STATUS_TRYING: break; - case C.STATUS_PROCEEDING: case C.STATUS_COMPLETED: tr.transport.send(tr.last_response); break; } - return true; } - break; } } - module.exports = { C: C, NonInviteClientTransaction: NonInviteClientTransaction, @@ -23574,23 +20061,20 @@ module.exports = { },{"./Constants":2,"./Logger":9,"./SIPMessage":21,"./Timers":23,"events":31}],25:[function(require,module,exports){ "use strict"; -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } var Logger = require('./Logger'); - var Socket = require('./Socket'); - var JsSIP_C = require('./Constants'); - var logger = new Logger('Transport'); + /** * Constants */ - var C = { // Transport status. STATUS_CONNECTED: 0, @@ -23607,73 +20091,83 @@ var C = { max_interval: JsSIP_C.CONNECTION_RECOVERY_MAX_INTERVAL } }; + /* * Manages one or multiple JsSIP.Socket instances. * Is reponsible for transport recovery logic among all socket instances. * * @socket JsSIP::Socket instance */ - module.exports = /*#__PURE__*/function () { function Transport(sockets) { var recovery_options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : C.recovery_options; - _classCallCheck(this, Transport); - logger.debug('new()'); - this.status = C.STATUS_DISCONNECTED; // Current socket. + this.status = C.STATUS_DISCONNECTED; - this.socket = null; // Socket collection. + // Current socket. + this.socket = null; + // Socket collection. this.sockets = []; this.recovery_options = recovery_options; this.recover_attempts = 0; this.recovery_timer = null; - this.close_requested = false; // It seems that TextDecoder is not available in some versions of React-Native. - // See https://github.com/versatica/JsSIP/issues/695 + this.close_requested = false; + // It seems that TextDecoder is not available in some versions of React-Native. + // See https://github.com/versatica/JsSIP/issues/695 try { this.textDecoder = new TextDecoder('utf8'); } catch (error) { logger.warn("cannot use TextDecoder: ".concat(error)); } - if (typeof sockets === 'undefined') { throw new TypeError('Invalid argument.' + ' undefined \'sockets\' argument'); } - if (!(sockets instanceof Array)) { sockets = [sockets]; } - sockets.forEach(function (socket) { if (!Socket.isSocket(socket.socket)) { throw new TypeError('Invalid argument.' + ' invalid \'JsSIP.Socket\' instance'); } - if (socket.weight && !Number(socket.weight)) { throw new TypeError('Invalid argument.' + ' \'weight\' attribute is not a number'); } - this.sockets.push({ socket: socket.socket, weight: socket.weight || 0, status: C.SOCKET_STATUS_READY }); - }, this); // Get the socket with higher weight. + }, this); + // Get the socket with higher weight. this._getSocket(); } + /** * Instance Methods */ - - - _createClass(Transport, [{ + return _createClass(Transport, [{ + key: "via_transport", + get: function get() { + return this.socket.via_transport; + } + }, { + key: "url", + get: function get() { + return this.socket.url; + } + }, { + key: "sip_uri", + get: function get() { + return this.socket.sip_uri; + } + }, { key: "connect", value: function connect() { logger.debug('connect()'); - if (this.isConnected()) { logger.debug('Transport is already connected'); return; @@ -23681,14 +20175,12 @@ module.exports = /*#__PURE__*/function () { logger.debug('Transport is connecting'); return; } - this.close_requested = false; this.status = C.STATUS_CONNECTING; this.onconnecting({ socket: this.socket, attempts: this.recover_attempts }); - if (!this.close_requested) { // Bind socket event callbacks. this.socket.onconnect = this._onConnect.bind(this); @@ -23696,7 +20188,6 @@ module.exports = /*#__PURE__*/function () { this.socket.ondata = this._onData.bind(this); this.socket.connect(); } - return; } }, { @@ -23705,20 +20196,18 @@ module.exports = /*#__PURE__*/function () { logger.debug('close()'); this.close_requested = true; this.recover_attempts = 0; - this.status = C.STATUS_DISCONNECTED; // Clear recovery_timer. + this.status = C.STATUS_DISCONNECTED; + // Clear recovery_timer. if (this.recovery_timer !== null) { clearTimeout(this.recovery_timer); this.recovery_timer = null; - } // Unbind socket event callbacks. - + } + // Unbind socket event callbacks. this.socket.onconnect = function () {}; - this.socket.ondisconnect = function () {}; - this.socket.ondata = function () {}; - this.socket.disconnect(); this.ondisconnect({ socket: this.socket, @@ -23729,12 +20218,10 @@ module.exports = /*#__PURE__*/function () { key: "send", value: function send(data) { logger.debug('send()'); - if (!this.isConnected()) { logger.warn('unable to send message, transport is not connected'); return false; } - var message = data.toString(); logger.debug("sending message:\n\n".concat(message, "\n")); return this.socket.send(message); @@ -23749,39 +20236,36 @@ module.exports = /*#__PURE__*/function () { value: function isConnecting() { return this.status === C.STATUS_CONNECTING; } + /** * Private API. */ - }, { key: "_reconnect", value: function _reconnect() { var _this = this; - this.recover_attempts += 1; var k = Math.floor(Math.random() * Math.pow(2, this.recover_attempts) + 1); - if (k < this.recovery_options.min_interval) { k = this.recovery_options.min_interval; } else if (k > this.recovery_options.max_interval) { k = this.recovery_options.max_interval; } - logger.debug("reconnection attempt: ".concat(this.recover_attempts, ". next connection attempt in ").concat(k, " seconds")); this.recovery_timer = setTimeout(function () { if (!_this.close_requested && !(_this.isConnected() || _this.isConnecting())) { // Get the next available socket with higher weight. - _this._getSocket(); // Connect the socket. - + _this._getSocket(); + // Connect the socket. _this.connect(); } }, k * 1000); } + /** * get the next available socket with higher weight */ - }, { key: "_getSocket", value: function _getSocket() { @@ -23797,36 +20281,34 @@ module.exports = /*#__PURE__*/function () { candidates.push(socket); } }); - if (candidates.length === 0) { // All sockets have failed. reset sockets status. this.sockets.forEach(function (socket) { socket.status = C.SOCKET_STATUS_READY; - }); // Get next available socket. + }); + // Get next available socket. this._getSocket(); - return; } - var idx = Math.floor(Math.random() * candidates.length); this.socket = candidates[idx].socket; } + /** * Socket Event Handlers */ - }, { key: "_onConnect", value: function _onConnect() { this.recover_attempts = 0; - this.status = C.STATUS_CONNECTED; // Clear recovery_timer. + this.status = C.STATUS_CONNECTED; + // Clear recovery_timer. if (this.recovery_timer !== null) { clearTimeout(this.recovery_timer); this.recovery_timer = null; } - this.onconnect({ socket: this }); @@ -23841,18 +20323,18 @@ module.exports = /*#__PURE__*/function () { code: code, reason: reason }); - if (this.close_requested) { return; - } // Update socket status. - else { - this.sockets.forEach(function (socket) { - if (this.socket === socket.socket) { - socket.status = C.SOCKET_STATUS_ERROR; - } - }, this); - } + } + // Update socket status. + else { + this.sockets.forEach(function (socket) { + if (this.socket === socket.socket) { + socket.status = C.SOCKET_STATUS_ERROR; + } + }, this); + } this._reconnect(error); } }, { @@ -23861,117 +20343,75 @@ module.exports = /*#__PURE__*/function () { // CRLF Keep Alive request from server, reply. if (data === '\r\n\r\n') { logger.debug('received message with double-CRLF Keep Alive request'); - try { // Reply with single CRLF. this.socket.send('\r\n'); } catch (error) { logger.warn("error sending Keep Alive response: ".concat(error)); } - return; - } // CRLF Keep Alive response from server, ignore it. - + } + // CRLF Keep Alive response from server, ignore it. if (data === '\r\n') { logger.debug('received message with CRLF Keep Alive response'); return; - } // Binary message. - else if (typeof data !== 'string') { - try { - if (this.textDecoder) data = this.textDecoder.decode(data);else data = String.fromCharCode.apply(null, new Uint8Array(data)); - } catch (evt) { - logger.debug('received binary message failed to be converted into string,' + ' message discarded'); - return; - } + } - logger.debug("received binary message:\n\n".concat(data, "\n")); - } // Text message. - else { - logger.debug("received text message:\n\n".concat(data, "\n")); - } + // Binary message. + else if (typeof data !== 'string') { + try { + if (this.textDecoder) data = this.textDecoder.decode(data);else data = String.fromCharCode.apply(null, new Uint8Array(data)); + } catch (evt) { + logger.debug('received binary message failed to be converted into string,' + ' message discarded'); + return; + } + logger.debug("received binary message:\n\n".concat(data, "\n")); + } + // Text message. + else { + logger.debug("received text message:\n\n".concat(data, "\n")); + } this.ondata({ transport: this, message: data }); } - }, { - key: "via_transport", - get: function get() { - return this.socket.via_transport; - } - }, { - key: "url", - get: function get() { - return this.socket.url; - } - }, { - key: "sip_uri", - get: function get() { - return this.socket.sip_uri; - } }]); - - return Transport; }(); },{"./Constants":2,"./Logger":9,"./Socket":22}],26:[function(require,module,exports){ "use strict"; -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } - -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } - -function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } - -function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - -function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - -function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } - -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } var EventEmitter = require('events').EventEmitter; - var Logger = require('./Logger'); - var JsSIP_C = require('./Constants'); - var Registrator = require('./Registrator'); - var RTCSession = require('./RTCSession'); - var Message = require('./Message'); - var Options = require('./Options'); - var Transactions = require('./Transactions'); - var Transport = require('./Transport'); - var Utils = require('./Utils'); - var Exceptions = require('./Exceptions'); - var URI = require('./URI'); - var Parser = require('./Parser'); - var SIPMessage = require('./SIPMessage'); - var sanityCheck = require('./sanityCheck'); - var config = require('./Config'); - var logger = new Logger('UA'); var C = { // UA status codes. @@ -23983,6 +20423,7 @@ var C = { CONFIGURATION_ERROR: 1, NETWORK_ERROR: 2 }; + /** * The User-Agent class. * @class JsSIP.UA @@ -23990,34 +20431,20 @@ var C = { * @throws {JsSIP.Exceptions.ConfigurationError} If a configuration parameter is invalid. * @throws {TypeError} If no configuration is given. */ - module.exports = /*#__PURE__*/function (_EventEmitter) { - _inherits(UA, _EventEmitter); - - var _super = _createSuper(UA); - - _createClass(UA, null, [{ - key: "C", - // Expose C object. - get: function get() { - return C; - } - }]); - function UA(configuration) { var _this; - _classCallCheck(this, UA); - logger.debug('new() [configuration:%o]', configuration); - _this = _super.call(this); + _this = _callSuper(this, UA); _this._cache = { credentials: {} }; _this._configuration = Object.assign({}, config.settings); _this._dynConfiguration = {}; - _this._dialogs = {}; // User actions outside any session/dialog (MESSAGE/OPTIONS). + _this._dialogs = {}; + // User actions outside any session/dialog (MESSAGE/OPTIONS). _this._applicants = {}; _this._sessions = {}; _this._transport = null; @@ -24029,31 +20456,57 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { nict: {}, ist: {}, ict: {} - }; // Custom UA empty object for high level use. + }; + // Custom UA empty object for high level use. _this._data = {}; - _this._closeTimer = null; // Check configuration argument. + _this._closeTimer = null; + // Check configuration argument. if (configuration === undefined) { throw new TypeError('Not enough arguments'); - } // Load configuration. - + } + // Load configuration. try { _this._loadConfig(configuration); } catch (e) { _this._status = C.STATUS_NOT_READY; _this._error = C.CONFIGURATION_ERROR; throw e; - } // Initialize registrator. - + } - _this._registrator = new Registrator(_assertThisInitialized(_this)); + // Initialize registrator. + _this._registrator = new Registrator(_this); return _this; } + _inherits(UA, _EventEmitter); + return _createClass(UA, [{ + key: "C", + get: function get() { + return C; + } + }, { + key: "status", + get: function get() { + return this._status; + } + }, { + key: "contact", + get: function get() { + return this._contact; + } + }, { + key: "configuration", + get: function get() { + return this._configuration; + } + }, { + key: "transport", + get: function get() { + return this._transport; + } - _createClass(UA, [{ - key: "start", // ================= // High Level API // ================= @@ -24062,85 +20515,84 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { * Connect to the server if status = STATUS_INIT. * Resume UA after being closed. */ + }, { + key: "start", value: function start() { logger.debug('start()'); - if (this._status === C.STATUS_INIT) { this._transport.connect(); } else if (this._status === C.STATUS_USER_CLOSED) { - logger.debug('restarting UA'); // Disconnect. + logger.debug('restarting UA'); + // Disconnect. if (this._closeTimer !== null) { clearTimeout(this._closeTimer); this._closeTimer = null; - this._transport.disconnect(); - } // Reconnect. - + } + // Reconnect. this._status = C.STATUS_INIT; - this._transport.connect(); } else if (this._status === C.STATUS_READY) { logger.debug('UA is in READY status, not restarted'); } else { logger.debug('ERROR: connection is down, Auto-Recovery system is trying to reconnect'); - } // Set dynamic configuration. - + } + // Set dynamic configuration. this._dynConfiguration.register = this._configuration.register; } + /** * Register. */ - }, { key: "register", value: function register() { logger.debug('register()'); this._dynConfiguration.register = true; - this._registrator.register(); } + /** * Unregister. */ - }, { key: "unregister", value: function unregister(options) { logger.debug('unregister()'); this._dynConfiguration.register = false; - this._registrator.unregister(options); } + /** * Get the Registrator instance. */ - }, { key: "registrator", value: function registrator() { return this._registrator; } + /** * Registration state. */ - }, { key: "isRegistered", value: function isRegistered() { return this._registrator.registered; } + /** * Connection state. */ - }, { key: "isConnected", value: function isConnected() { return this._transport.isConnected(); } + /** * Make an outgoing call. * @@ -24150,7 +20602,6 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { * -throws {TypeError} * */ - }, { key: "call", value: function call(target, options) { @@ -24159,6 +20610,7 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { session.connect(target, options); return session; } + /** * Send a message. * @@ -24169,7 +20621,6 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { * -throws {TypeError} * */ - }, { key: "sendMessage", value: function sendMessage(target, body, options) { @@ -24178,6 +20629,7 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { message.send(target, body, options); return message; } + /** * Send a SIP OPTIONS. * @@ -24188,7 +20640,6 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { * -throws {TypeError} * */ - }, { key: "sendOptions", value: function sendOptions(target, body, options) { @@ -24197,117 +20648,108 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { message.send(target, body, options); return message; } + /** * Terminate ongoing sessions. */ - }, { key: "terminateSessions", value: function terminateSessions(options) { logger.debug('terminateSessions()'); - for (var idx in this._sessions) { if (!this._sessions[idx].isEnded()) { this._sessions[idx].terminate(options); } } } + /** * Gracefully close. * */ - }, { key: "stop", value: function stop() { var _this2 = this; + logger.debug('stop()'); - logger.debug('stop()'); // Remove dynamic settings. - + // Remove dynamic settings. this._dynConfiguration = {}; - if (this._status === C.STATUS_USER_CLOSED) { logger.debug('UA already closed'); return; - } // Close registrator. - - - this._registrator.close(); // If there are session wait a bit so CANCEL/BYE can be sent and their responses received. + } + // Close registrator. + this._registrator.close(); - var num_sessions = Object.keys(this._sessions).length; // Run _terminate_ on every Session. + // If there are session wait a bit so CANCEL/BYE can be sent and their responses received. + var num_sessions = Object.keys(this._sessions).length; + // Run _terminate_ on every Session. for (var session in this._sessions) { if (Object.prototype.hasOwnProperty.call(this._sessions, session)) { logger.debug("closing session ".concat(session)); - try { this._sessions[session].terminate(); } catch (error) {} } - } // Run _close_ on every applicant. - + } + // Run _close_ on every applicant. for (var applicant in this._applicants) { if (Object.prototype.hasOwnProperty.call(this._applicants, applicant)) try { this._applicants[applicant].close(); } catch (error) {} } - this._status = C.STATUS_USER_CLOSED; var num_transactions = Object.keys(this._transactions.nict).length + Object.keys(this._transactions.nist).length + Object.keys(this._transactions.ict).length + Object.keys(this._transactions.ist).length; - if (num_transactions === 0 && num_sessions === 0) { this._transport.disconnect(); } else { this._closeTimer = setTimeout(function () { _this2._closeTimer = null; - _this2._transport.disconnect(); }, 2000); } } + /** * Normalice a string into a valid SIP request URI * -param {String} target * -returns {JsSIP.URI|undefined} */ - }, { key: "normalizeTarget", value: function normalizeTarget(target) { return Utils.normalizeTarget(target, this._configuration.hostport_params); } + /** * Allow retrieving configuration and autogenerated fields in runtime. */ - }, { key: "get", value: function get(parameter) { switch (parameter) { case 'authorization_user': return this._configuration.authorization_user; - case 'realm': return this._configuration.realm; - case 'ha1': return this._configuration.ha1; - case 'authorization_jwt': return this._configuration.authorization_jwt; - default: logger.warn('get() | cannot get "%s" parameter in runtime', parameter); return undefined; } } + /** * Allow configuration changes in runtime. * Returns true if the parameter could be set. */ - }, { key: "set", value: function set(parameter, value) { @@ -24317,59 +20759,52 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { this._configuration.authorization_user = String(value); break; } - case 'password': { this._configuration.password = String(value); break; } - case 'realm': { this._configuration.realm = String(value); break; } - case 'ha1': { - this._configuration.ha1 = String(value); // Delete the plain SIP password. - + this._configuration.ha1 = String(value); + // Delete the plain SIP password. this._configuration.password = null; break; } - case 'authorization_jwt': { this._configuration.authorization_jwt = String(value); break; } - case 'display_name': { this._configuration.display_name = value; break; } - case 'extra_headers': { this._configuration.extra_headers = value; break; } - default: logger.warn('set() | cannot set "%s" parameter in runtime', parameter); return false; } - return true; - } // ========================== + } + + // ========================== // Event Handlers. // ========================== /** * new Transaction */ - }, { key: "newTransaction", value: function newTransaction(transaction) { @@ -24378,10 +20813,10 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { transaction: transaction }); } + /** * Transaction destroyed. */ - }, { key: "destroyTransaction", value: function destroyTransaction(transaction) { @@ -24390,133 +20825,133 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { transaction: transaction }); } + /** * new Dialog */ - }, { key: "newDialog", value: function newDialog(dialog) { this._dialogs[dialog.id] = dialog; } + /** * Dialog destroyed. */ - }, { key: "destroyDialog", value: function destroyDialog(dialog) { delete this._dialogs[dialog.id]; } + /** * new Message */ - }, { key: "newMessage", value: function newMessage(message, data) { this._applicants[message] = message; this.emit('newMessage', data); } + /** * new Options */ - }, { key: "newOptions", value: function newOptions(message, data) { this._applicants[message] = message; this.emit('newOptions', data); } + /** * Message destroyed. */ - }, { key: "destroyMessage", value: function destroyMessage(message) { delete this._applicants[message]; } + /** * new RTCSession */ - }, { key: "newRTCSession", value: function newRTCSession(session, data) { this._sessions[session.id] = session; this.emit('newRTCSession', data); } + /** * RTCSession destroyed. */ - }, { key: "destroyRTCSession", value: function destroyRTCSession(session) { delete this._sessions[session.id]; } + /** * Registered */ - }, { key: "registered", value: function registered(data) { this.emit('registered', data); } + /** * Unregistered */ - }, { key: "unregistered", value: function unregistered(data) { this.emit('unregistered', data); } + /** * Registration Failed */ - }, { key: "registrationFailed", value: function registrationFailed(data) { this.emit('registrationFailed', data); - } // ========================= + } + + // ========================= // ReceiveRequest. // ========================= /** * Request reception */ - }, { key: "receiveRequest", value: function receiveRequest(request) { - var method = request.method; // Check that request URI points to us. + var method = request.method; + // Check that request URI points to us. if (request.ruri.user !== this._configuration.uri.user && request.ruri.user !== this._contact.uri.user) { logger.debug('Request-URI does not point to us'); - if (request.method !== JsSIP_C.ACK) { request.reply_sl(404); } - return; - } // Check request URI scheme. - + } + // Check request URI scheme. if (request.ruri.scheme === JsSIP_C.SIPS) { request.reply_sl(416); return; - } // Check transaction. - + } + // Check transaction. if (Transactions.checkTransaction(this, request)) { return; - } // Create the server transaction. - + } + // Create the server transaction. if (method === JsSIP_C.INVITE) { /* eslint-disable no-new */ new Transactions.InviteServerTransaction(this, this._transport, request); @@ -24526,19 +20961,17 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { new Transactions.NonInviteServerTransaction(this, this._transport, request); /* eslint-enable no-new */ } + /* RFC3261 12.2.2 * Requests that do not change in any way the state of a dialog may be * received within a dialog (for example, an OPTIONS request). * They are processed as if they had been received outside the dialog. */ - - if (method === JsSIP_C.OPTIONS) { if (this.listeners('newOptions').length === 0) { request.reply(200); return; } - var message = new Options(this); message.init_incoming(request); } else if (method === JsSIP_C.MESSAGE) { @@ -24546,9 +20979,7 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { request.reply(405); return; } - var _message = new Message(this); - _message.init_incoming(request); } else if (method === JsSIP_C.INVITE) { // Initial INVITE. @@ -24557,10 +20988,10 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { return; } } - var dialog; - var session; // Initial Request. + var session; + // Initial Request. if (!request.to_tag) { switch (method) { case JsSIP_C.INVITE: @@ -24569,10 +21000,8 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { if (request.hasHeader('replaces')) { var replaces = request.replaces; dialog = this._findDialog(replaces.call_id, replaces.from_tag, replaces.to_tag); - if (dialog) { session = dialog.owner; - if (!session.isEnded()) { session.receiveRequest(request); } else { @@ -24589,32 +21018,25 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { logger.warn('INVITE received but WebRTC is not supported'); request.reply(488); } - break; - case JsSIP_C.BYE: // Out of dialog BYE received. request.reply(481); break; - case JsSIP_C.CANCEL: session = this._findSession(request); - if (session) { session.receiveRequest(request); } else { logger.debug('received CANCEL request for a non existent session'); } - break; - case JsSIP_C.ACK: /* Absorb it. * ACK request without a corresponding Invite Transaction * and without To tag. */ break; - case JsSIP_C.NOTIFY: // Receive new sip event. this.emit('sipEvent', { @@ -24623,55 +21045,53 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { }); request.reply(200); break; - default: request.reply(405); break; } - } // In-dialog request. + } + // In-dialog request. else { - dialog = this._findDialog(request.call_id, request.from_tag, request.to_tag); - - if (dialog) { - dialog.receiveRequest(request); - } else if (method === JsSIP_C.NOTIFY) { - session = this._findSession(request); - - if (session) { - session.receiveRequest(request); - } else { - logger.debug('received NOTIFY request for a non existent subscription'); - request.reply(481, 'Subscription does not exist'); - } + dialog = this._findDialog(request.call_id, request.from_tag, request.to_tag); + if (dialog) { + dialog.receiveRequest(request); + } else if (method === JsSIP_C.NOTIFY) { + session = this._findSession(request); + if (session) { + session.receiveRequest(request); + } else { + logger.debug('received NOTIFY request for a non existent subscription'); + request.reply(481, 'Subscription does not exist'); } - /* RFC3261 12.2.2 - * Request with to tag, but no matching dialog found. - * Exception: ACK for an Invite request for which a dialog has not - * been created. - */ - else if (method !== JsSIP_C.ACK) { - request.reply(481); - } } - } // ================= + + /* RFC3261 12.2.2 + * Request with to tag, but no matching dialog found. + * Exception: ACK for an Invite request for which a dialog has not + * been created. + */else if (method !== JsSIP_C.ACK) { + request.reply(481); + } + } + } + + // ================= // Utils. // ================= /** * Get the session to which the request belongs to, if any. */ - }, { key: "_findSession", value: function _findSession(_ref) { var call_id = _ref.call_id, - from_tag = _ref.from_tag, - to_tag = _ref.to_tag; + from_tag = _ref.from_tag, + to_tag = _ref.to_tag; var sessionIDa = call_id + from_tag; var sessionA = this._sessions[sessionIDa]; var sessionIDb = call_id + to_tag; var sessionB = this._sessions[sessionIDb]; - if (sessionA) { return sessionA; } else if (sessionB) { @@ -24680,22 +21100,20 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { return null; } } + /** * Get the dialog to which the request belongs to, if any. */ - }, { key: "_findDialog", value: function _findDialog(call_id, from_tag, to_tag) { var id = call_id + from_tag + to_tag; var dialog = this._dialogs[id]; - if (dialog) { return dialog; } else { id = call_id + to_tag + from_tag; dialog = this._dialogs[id]; - if (dialog) { return dialog; } else { @@ -24711,34 +21129,37 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { config.load(this._configuration, configuration); } catch (e) { throw e; - } // Post Configuration Process. - // Allow passing 0 number as display_name. + } + // Post Configuration Process. + // Allow passing 0 number as display_name. if (this._configuration.display_name === 0) { this._configuration.display_name = '0'; - } // Instance-id for GRUU. - + } + // Instance-id for GRUU. if (!this._configuration.instance_id) { this._configuration.instance_id = Utils.newUUID(); - } // Jssip_id instance parameter. Static random tag of length 5. - + } - this._configuration.jssip_id = Utils.createRandomToken(5); // String containing this._configuration.uri without scheme and user. + // Jssip_id instance parameter. Static random tag of length 5. + this._configuration.jssip_id = Utils.createRandomToken(5); + // String containing this._configuration.uri without scheme and user. var hostport_params = this._configuration.uri.clone(); - hostport_params.user = null; - this._configuration.hostport_params = hostport_params.toString().replace(/^sip:/i, ''); // Transport. + this._configuration.hostport_params = hostport_params.toString().replace(/^sip:/i, ''); + // Transport. try { this._transport = new Transport(this._configuration.sockets, { // Recovery options. max_interval: this._configuration.connection_recovery_max_interval, min_interval: this._configuration.connection_recovery_min_interval - }); // Transport event callbacks. + }); + // Transport event callbacks. this._transport.onconnecting = onTransportConnecting.bind(this); this._transport.onconnect = onTransportConnect.bind(this); this._transport.ondisconnect = onTransportDisconnect.bind(this); @@ -24746,39 +21167,41 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { } catch (e) { logger.warn(e); throw new Exceptions.ConfigurationError('sockets', this._configuration.sockets); - } // Remove sockets instance from configuration object. + } + // Remove sockets instance from configuration object. + delete this._configuration.sockets; - delete this._configuration.sockets; // Check whether authorization_user is explicitly defined. + // Check whether authorization_user is explicitly defined. // Take 'this._configuration.uri.user' value if not. - if (!this._configuration.authorization_user) { this._configuration.authorization_user = this._configuration.uri.user; - } // If no 'registrar_server' is set use the 'uri' value without user portion and - // without URI params/headers. - + } + // If no 'registrar_server' is set use the 'uri' value without user portion and + // without URI params/headers. if (!this._configuration.registrar_server) { var registrar_server = this._configuration.uri.clone(); - registrar_server.user = null; registrar_server.clearParams(); registrar_server.clearHeaders(); this._configuration.registrar_server = registrar_server; - } // User no_answer_timeout. - + } - this._configuration.no_answer_timeout *= 1000; // Via Host. + // User no_answer_timeout. + this._configuration.no_answer_timeout *= 1000; + // Via Host. if (this._configuration.contact_uri) { this._configuration.via_host = this._configuration.contact_uri.host; - } // Contact URI. - else { - this._configuration.contact_uri = new URI('sip', Utils.createRandomToken(8), this._configuration.via_host, null, { - transport: 'ws' - }); - } + } + // Contact URI. + else { + this._configuration.contact_uri = new URI('sip', Utils.createRandomToken(8), this._configuration.via_host, null, { + transport: 'ws' + }); + } this._contact = { pub_gruu: null, temp_gruu: null, @@ -24788,24 +21211,21 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { var anonymous = options.anonymous || null; var outbound = options.outbound || null; var contact = '<'; - if (anonymous) { contact += this.temp_gruu || 'sip:anonymous@anonymous.invalid;transport=ws'; } else { contact += this.pub_gruu || this.uri.toString(); } - if (outbound && (anonymous ? !this.temp_gruu : !this.pub_gruu)) { contact += ';ob'; } - contact += '>'; return contact; } - }; // Seal the configuration. + }; + // Seal the configuration. var writable_parameters = ['authorization_user', 'password', 'realm', 'ha1', 'authorization_jwt', 'display_name', 'register', 'extra_headers']; - for (var parameter in this._configuration) { if (Object.prototype.hasOwnProperty.call(this._configuration, parameter)) { if (writable_parameters.indexOf(parameter) !== -1) { @@ -24821,9 +21241,7 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { } } } - logger.debug('configuration parameters after validation:'); - for (var _parameter in this._configuration) { // Only show the user user configurable parameters. if (Object.prototype.hasOwnProperty.call(config.settings, _parameter)) { @@ -24832,119 +21250,88 @@ module.exports = /*#__PURE__*/function (_EventEmitter) { case 'registrar_server': logger.debug("- ".concat(_parameter, ": ").concat(this._configuration[_parameter])); break; - case 'password': case 'ha1': case 'authorization_jwt': logger.debug("- ".concat(_parameter, ": NOT SHOWN")); break; - default: logger.debug("- ".concat(_parameter, ": ").concat(JSON.stringify(this._configuration[_parameter]))); } } } - return; } - }, { + }], [{ key: "C", - get: function get() { + get: + // Expose C object. + function get() { return C; } - }, { - key: "status", - get: function get() { - return this._status; - } - }, { - key: "contact", - get: function get() { - return this._contact; - } - }, { - key: "configuration", - get: function get() { - return this._configuration; - } - }, { - key: "transport", - get: function get() { - return this._transport; - } }]); - - return UA; }(EventEmitter); + /** * Transport event handlers */ -// Transport connecting event. - +// Transport connecting event. function onTransportConnecting(data) { this.emit('connecting', data); -} // Transport connected event. - +} +// Transport connected event. function onTransportConnect(data) { if (this._status === C.STATUS_USER_CLOSED) { return; } - this._status = C.STATUS_READY; this._error = null; this.emit('connected', data); - if (this._dynConfiguration.register) { this._registrator.register(); } -} // Transport disconnected event. - +} +// Transport disconnected event. function onTransportDisconnect(data) { // Run _onTransportError_ callback on every client transaction using _transport_. var client_transactions = ['nict', 'ict', 'nist', 'ist']; - for (var _i = 0, _client_transactions = client_transactions; _i < _client_transactions.length; _i++) { var type = _client_transactions[_i]; - for (var id in this._transactions[type]) { if (Object.prototype.hasOwnProperty.call(this._transactions[type], id)) { this._transactions[type][id].onTransportError(); } } } + this.emit('disconnected', data); - this.emit('disconnected', data); // Call registrator _onTransportClosed_. - + // Call registrator _onTransportClosed_. this._registrator.onTransportClosed(); - if (this._status !== C.STATUS_USER_CLOSED) { this._status = C.STATUS_NOT_READY; this._error = C.NETWORK_ERROR; } -} // Transport data event. - +} +// Transport data event. function onTransportData(data) { var transport = data.transport; var message = data.message; message = Parser.parseMessage(message, this); - if (!message) { return; } - if (this._status === C.STATUS_USER_CLOSED && message instanceof SIPMessage.IncomingRequest) { return; - } // Do some sanity check. - + } + // Do some sanity check. if (!sanityCheck(message, this, transport)) { return; } - if (message instanceof SIPMessage.IncomingRequest) { message.transport = transport; this.receiveRequest(message); @@ -24953,29 +21340,23 @@ function onTransportData(data) { * any transaction, it is discarded here and no passed to the core * in order to be discarded there. */ - var transaction; + var transaction; switch (message.method) { case JsSIP_C.INVITE: transaction = this._transactions.ict[message.via_branch]; - if (transaction) { transaction.receiveResponse(message); } - break; - case JsSIP_C.ACK: // Just in case ;-). break; - default: transaction = this._transactions.nict[message.via_branch]; - if (transaction) { transaction.receiveResponse(message); } - break; } } @@ -24983,23 +21364,19 @@ function onTransportData(data) { },{"./Config":1,"./Constants":2,"./Exceptions":6,"./Logger":9,"./Message":10,"./Options":12,"./Parser":13,"./RTCSession":14,"./Registrator":19,"./SIPMessage":21,"./Transactions":24,"./Transport":25,"./URI":27,"./Utils":28,"./sanityCheck":30,"events":31}],27:[function(require,module,exports){ "use strict"; -function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } - -function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } - -function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; } +function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } +function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } var JsSIP_C = require('./Constants'); - var Utils = require('./Utils'); - var Grammar = require('./Grammar'); + /** * -param {String} [scheme] * -param {String} [user] @@ -25009,60 +21386,67 @@ var Grammar = require('./Grammar'); * -param {Object} [headers] * */ - - module.exports = /*#__PURE__*/function () { - _createClass(URI, null, [{ - key: "parse", - - /** - * Parse the given string and returns a JsSIP.URI instance or undefined if - * it is an invalid URI. - */ - value: function parse(uri) { - uri = Grammar.parse(uri, 'SIP_URI'); - - if (uri !== -1) { - return uri; - } else { - return undefined; - } - } - }]); - function URI(scheme, user, host, port) { var parameters = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; var headers = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - _classCallCheck(this, URI); - // Checks. if (!host) { throw new TypeError('missing or invalid "host" parameter'); - } // Initialize parameters. - + } + // Initialize parameters. this._parameters = {}; this._headers = {}; this._scheme = scheme || JsSIP_C.SIP; this._user = user; this._host = host; this._port = port; - for (var param in parameters) { if (Object.prototype.hasOwnProperty.call(parameters, param)) { this.setParam(param, parameters[param]); } } - for (var header in headers) { if (Object.prototype.hasOwnProperty.call(headers, header)) { this.setHeader(header, headers[header]); } } } - - _createClass(URI, [{ + return _createClass(URI, [{ + key: "scheme", + get: function get() { + return this._scheme; + }, + set: function set(value) { + this._scheme = value.toLowerCase(); + } + }, { + key: "user", + get: function get() { + return this._user; + }, + set: function set(value) { + this._user = value; + } + }, { + key: "host", + get: function get() { + return this._host; + }, + set: function set(value) { + this._host = value.toLowerCase(); + } + }, { + key: "port", + get: function get() { + return this._port; + }, + set: function set(value) { + this._port = value === 0 ? value : parseInt(value, 10) || null; + } + }, { key: "setParam", value: function setParam(key, value) { if (key) { @@ -25087,7 +21471,6 @@ module.exports = /*#__PURE__*/function () { key: "deleteParam", value: function deleteParam(parameter) { parameter = parameter.toLowerCase(); - if (this._parameters.hasOwnProperty(parameter)) { var value = this._parameters[parameter]; delete this._parameters[parameter]; @@ -25122,7 +21505,6 @@ module.exports = /*#__PURE__*/function () { key: "deleteHeader", value: function deleteHeader(header) { header = Utils.headerize(header); - if (this._headers.hasOwnProperty(header)) { var value = this._headers[header]; delete this._headers[header]; @@ -25144,32 +21526,25 @@ module.exports = /*#__PURE__*/function () { value: function toString() { var headers = []; var uri = "".concat(this._scheme, ":"); - if (this._user) { uri += "".concat(Utils.escapeUser(this._user), "@"); } - uri += this._host; - if (this._port || this._port === 0) { uri += ":".concat(this._port); } - for (var parameter in this._parameters) { if (Object.prototype.hasOwnProperty.call(this._parameters, parameter)) { uri += ";".concat(parameter); - if (this._parameters[parameter] !== null) { uri += "=".concat(this._parameters[parameter]); } } } - for (var header in this._headers) { if (Object.prototype.hasOwnProperty.call(this._headers, header)) { var _iterator = _createForOfIteratorHelper(this._headers[header]), - _step; - + _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var item = _step.value; @@ -25182,88 +21557,56 @@ module.exports = /*#__PURE__*/function () { } } } - if (headers.length > 0) { uri += "?".concat(headers.join('&')); } - return uri; } }, { key: "toAor", value: function toAor(show_port) { var aor = "".concat(this._scheme, ":"); - if (this._user) { aor += "".concat(Utils.escapeUser(this._user), "@"); } - aor += this._host; - if (show_port && (this._port || this._port === 0)) { aor += ":".concat(this._port); } - return aor; } - }, { - key: "scheme", - get: function get() { - return this._scheme; - }, - set: function set(value) { - this._scheme = value.toLowerCase(); - } - }, { - key: "user", - get: function get() { - return this._user; - }, - set: function set(value) { - this._user = value; - } - }, { - key: "host", - get: function get() { - return this._host; - }, - set: function set(value) { - this._host = value.toLowerCase(); - } - }, { - key: "port", - get: function get() { - return this._port; - }, - set: function set(value) { - this._port = value === 0 ? value : parseInt(value, 10) || null; + }], [{ + key: "parse", + value: + /** + * Parse the given string and returns a JsSIP.URI instance or undefined if + * it is an invalid URI. + */ + function parse(uri) { + uri = Grammar.parse(uri, 'SIP_URI'); + if (uri !== -1) { + return uri; + } else { + return undefined; + } } }]); - - return URI; }(); },{"./Constants":2,"./Grammar":7,"./Utils":28}],28:[function(require,module,exports){ "use strict"; -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - -function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } - -function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } - -function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } - +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; } +function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } +function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } var JsSIP_C = require('./Constants'); - var URI = require('./URI'); - var Grammar = require('./Grammar'); - exports.str_utf8_length = function (string) { return unescape(encodeURIComponent(string)).length; -}; // Used by 'hasMethods'. - +}; +// Used by 'hasMethods'. var isFunction = exports.isFunction = function (fn) { if (fn !== undefined) { return Object.prototype.toString.call(fn) === '[object Function]' ? true : false; @@ -25271,7 +21614,6 @@ var isFunction = exports.isFunction = function (fn) { return false; } }; - exports.isString = function (str) { if (str !== undefined) { return Object.prototype.toString.call(str) === '[object String]' ? true : false; @@ -25279,82 +21621,71 @@ exports.isString = function (str) { return false; } }; - exports.isDecimal = function (num) { return !isNaN(num) && parseFloat(num) === parseInt(num, 10); }; - exports.isEmpty = function (value) { return value === null || value === '' || value === undefined || Array.isArray(value) && value.length === 0 || typeof value === 'number' && isNaN(value); }; - exports.hasMethods = function (obj) { for (var _len = arguments.length, methodNames = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { methodNames[_key - 1] = arguments[_key]; } - for (var _i = 0, _methodNames = methodNames; _i < _methodNames.length; _i++) { var methodName = _methodNames[_i]; - if (isFunction(obj[methodName])) { return false; } } - return true; -}; // Used by 'newTag'. - +}; +// Used by 'newTag'. var createRandomToken = exports.createRandomToken = function (size) { var base = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 32; var i, - r, - token = ''; - + r, + token = ''; for (i = 0; i < size; i++) { r = Math.random() * base | 0; token += r.toString(base); } - return token; }; - exports.newTag = function () { return createRandomToken(10); -}; // https://stackoverflow.com/users/109538/broofa. - +}; +// https://stackoverflow.com/users/109538/broofa. exports.newUUID = function () { var UUID = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { var r = Math.random() * 16 | 0, - v = c === 'x' ? r : r & 0x3 | 0x8; + v = c === 'x' ? r : r & 0x3 | 0x8; return v.toString(16); }); return UUID; }; - exports.hostType = function (host) { if (!host) { return; } else { host = Grammar.parse(host, 'host'); - if (host !== -1) { return host.host_type; } } }; + /** * Hex-escape a SIP URI user. * Don't hex-escape ':' (%3A), '+' (%2B), '?' (%3F"), '/' (%2F). * * Used by 'normalizeTarget'. */ - - var escapeUser = exports.escapeUser = function (user) { return encodeURIComponent(decodeURIComponent(user)).replace(/%3A/ig, ':').replace(/%2B/ig, '+').replace(/%3F/ig, '?').replace(/%2F/ig, '/'); }; + /** * Normalize SIP URI. * NOTE: It does not allow a SIP URI without username. @@ -25362,53 +21693,51 @@ var escapeUser = exports.escapeUser = function (user) { * Detects the domain part (if given) and properly hex-escapes the user portion. * If the user portion has only 'tel' number symbols the user portion is clean of 'tel' visual separators. */ - - exports.normalizeTarget = function (target, domain) { // If no target is given then raise an error. if (!target) { - return; // If a URI instance is given then return it. + return; + // If a URI instance is given then return it. } else if (target instanceof URI) { - return target; // If a string is given split it by '@': + return target; + + // If a string is given split it by '@': // - Last fragment is the desired domain. // - Otherwise append the given domain argument. } else if (typeof target === 'string') { var target_array = target.split('@'); var target_user; var target_domain; - switch (target_array.length) { case 1: if (!domain) { return; } - target_user = target; target_domain = domain; break; - case 2: target_user = target_array[0]; target_domain = target_array[1]; break; - default: target_user = target_array.slice(0, target_array.length - 1).join('@'); target_domain = target_array[target_array.length - 1]; - } // Remove the URI scheme (if present). - + } - target_user = target_user.replace(/^(sips?|tel):/i, ''); // Remove 'tel' visual separators if the user portion just contains 'tel' number symbols. + // Remove the URI scheme (if present). + target_user = target_user.replace(/^(sips?|tel):/i, ''); + // Remove 'tel' visual separators if the user portion just contains 'tel' number symbols. if (/^[-.()]*\+?[0-9\-.()]+$/.test(target_user)) { target_user = target_user.replace(/[-.()]/g, ''); - } // Build the complete SIP URI. - + } - target = "".concat(JsSIP_C.SIP, ":").concat(escapeUser(target_user), "@").concat(target_domain); // Finally parse the resulting URI. + // Build the complete SIP URI. + target = "".concat(JsSIP_C.SIP, ":").concat(escapeUser(target_user), "@").concat(target_domain); + // Finally parse the resulting URI. var uri; - if (uri = URI.parse(target)) { return uri; } else { @@ -25418,7 +21747,6 @@ exports.normalizeTarget = function (target, domain) { return; } }; - exports.headerize = function (string) { var exceptions = { 'Call-Id': 'Call-ID', @@ -25429,61 +21757,50 @@ exports.headerize = function (string) { var hname = ''; var parts = name.length; var part; - for (part = 0; part < parts; part++) { if (part !== 0) { hname += '-'; } - hname += name[part].charAt(0).toUpperCase() + name[part].substring(1); } - if (exceptions[hname]) { hname = exceptions[hname]; } - return hname; }; - exports.sipErrorCause = function (status_code) { for (var cause in JsSIP_C.SIP_ERROR_CAUSES) { if (JsSIP_C.SIP_ERROR_CAUSES[cause].indexOf(status_code) !== -1) { return JsSIP_C.causes[cause]; } } - return JsSIP_C.causes.SIP_FAILURE_CODE; }; + /** * Generate a random Test-Net IP (https://tools.ietf.org/html/rfc5735) */ - - exports.getRandomTestNetIP = function () { function getOctet(from, to) { return Math.floor(Math.random() * (to - from + 1) + from); } - return "192.0.2.".concat(getOctet(1, 254)); -}; // MD5 (Message-Digest Algorithm) https://www.webtoolkit.info. - +}; +// MD5 (Message-Digest Algorithm) https://www.webtoolkit.info. exports.calculateMD5 = function (string) { function rotateLeft(lValue, iShiftBits) { return lValue << iShiftBits | lValue >>> 32 - iShiftBits; } - function addUnsigned(lX, lY) { var lX8 = lX & 0x80000000; var lY8 = lY & 0x80000000; var lX4 = lX & 0x40000000; var lY4 = lY & 0x40000000; var lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF); - if (lX4 & lY4) { return lResult ^ 0x80000000 ^ lX8 ^ lY8; } - if (lX4 | lY4) { if (lResult & 0x40000000) { return lResult ^ 0xC0000000 ^ lX8 ^ lY8; @@ -25494,43 +21811,34 @@ exports.calculateMD5 = function (string) { return lResult ^ lX8 ^ lY8; } } - function doF(x, y, z) { return x & y | ~x & z; } - function doG(x, y, z) { return x & z | y & ~z; } - function doH(x, y, z) { return x ^ y ^ z; } - function doI(x, y, z) { return y ^ (x | ~z); } - function doFF(a, b, c, d, x, s, ac) { a = addUnsigned(a, addUnsigned(addUnsigned(doF(b, c, d), x), ac)); return addUnsigned(rotateLeft(a, s), b); } - function doGG(a, b, c, d, x, s, ac) { a = addUnsigned(a, addUnsigned(addUnsigned(doG(b, c, d), x), ac)); return addUnsigned(rotateLeft(a, s), b); } - function doHH(a, b, c, d, x, s, ac) { a = addUnsigned(a, addUnsigned(addUnsigned(doH(b, c, d), x), ac)); return addUnsigned(rotateLeft(a, s), b); } - function doII(a, b, c, d, x, s, ac) { a = addUnsigned(a, addUnsigned(addUnsigned(doI(b, c, d), x), ac)); return addUnsigned(rotateLeft(a, s), b); } - function convertToWordArray(str) { var lWordCount; var lMessageLength = str.length; @@ -25540,14 +21848,12 @@ exports.calculateMD5 = function (string) { var lWordArray = new Array(lNumberOfWords - 1); var lBytePosition = 0; var lByteCount = 0; - while (lByteCount < lMessageLength) { lWordCount = (lByteCount - lByteCount % 4) / 4; lBytePosition = lByteCount % 4 * 8; lWordArray[lWordCount] = lWordArray[lWordCount] | str.charCodeAt(lByteCount) << lBytePosition; lByteCount++; } - lWordCount = (lByteCount - lByteCount % 4) / 4; lBytePosition = lByteCount % 4 * 8; lWordArray[lWordCount] = lWordArray[lWordCount] | 0x80 << lBytePosition; @@ -25555,28 +21861,22 @@ exports.calculateMD5 = function (string) { lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29; return lWordArray; } - function wordToHex(lValue) { var wordToHexValue = '', - wordToHexValue_temp = '', - lByte, - lCount; - + wordToHexValue_temp = '', + lByte, + lCount; for (lCount = 0; lCount <= 3; lCount++) { lByte = lValue >>> lCount * 8 & 255; wordToHexValue_temp = "0".concat(lByte.toString(16)); wordToHexValue = wordToHexValue + wordToHexValue_temp.substr(wordToHexValue_temp.length - 2, 2); } - return wordToHexValue; } - function utf8Encode(str) { var utftext = ''; - for (var n = 0; n < str.length; n++) { var _c = str.charCodeAt(n); - if (_c < 128) { utftext += String.fromCharCode(_c); } else if (_c > 127 && _c < 2048) { @@ -25588,35 +21888,32 @@ exports.calculateMD5 = function (string) { utftext += String.fromCharCode(_c & 63 | 128); } } - return utftext; } - var x = []; var k, AA, BB, CC, DD, a, b, c, d; var S11 = 7, - S12 = 12, - S13 = 17, - S14 = 22; + S12 = 12, + S13 = 17, + S14 = 22; var S21 = 5, - S22 = 9, - S23 = 14, - S24 = 20; + S22 = 9, + S23 = 14, + S24 = 20; var S31 = 4, - S32 = 11, - S33 = 16, - S34 = 23; + S32 = 11, + S33 = 16, + S34 = 23; var S41 = 6, - S42 = 10, - S43 = 15, - S44 = 21; + S42 = 10, + S43 = 15, + S44 = 21; string = utf8Encode(string); x = convertToWordArray(string); a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476; - for (k = 0; k < x.length; k += 16) { AA = a; BB = b; @@ -25691,27 +21988,22 @@ exports.calculateMD5 = function (string) { c = addUnsigned(c, CC); d = addUnsigned(d, DD); } - var temp = wordToHex(a) + wordToHex(b) + wordToHex(c) + wordToHex(d); return temp.toLowerCase(); }; - exports.closeMediaStream = function (stream) { if (!stream) { return; - } // Latest spec states that MediaStream has no stop() method and instead must - // call stop() on every MediaStreamTrack. - + } + // Latest spec states that MediaStream has no stop() method and instead must + // call stop() on every MediaStreamTrack. try { var tracks; - if (stream.getTracks) { tracks = stream.getTracks(); - var _iterator = _createForOfIteratorHelper(tracks), - _step; - + _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var track = _step.value; @@ -25724,14 +22016,11 @@ exports.closeMediaStream = function (stream) { } } else { tracks = stream.getAudioTracks(); - var _iterator2 = _createForOfIteratorHelper(tracks), - _step2; - + _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var _track = _step2.value; - _track.stop(); } } catch (err) { @@ -25739,16 +22028,12 @@ exports.closeMediaStream = function (stream) { } finally { _iterator2.f(); } - tracks = stream.getVideoTracks(); - var _iterator3 = _createForOfIteratorHelper(tracks), - _step3; - + _step3; try { for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { var _track2 = _step3.value; - _track2.stop(); } } catch (err) { @@ -25765,11 +22050,9 @@ exports.closeMediaStream = function (stream) { } } }; - exports.cloneArray = function (array) { return array && array.slice() || []; }; - exports.cloneObject = function (obj) { var fallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; return obj && Object.assign({}, obj) || fallback; @@ -25777,29 +22060,24 @@ exports.cloneObject = function (obj) { },{"./Constants":2,"./Grammar":7,"./URI":27}],29:[function(require,module,exports){ "use strict"; -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } var Logger = require('./Logger'); - var Grammar = require('./Grammar'); - var logger = new Logger('WebSocketInterface'); - module.exports = /*#__PURE__*/function () { function WebSocketInterface(url) { _classCallCheck(this, WebSocketInterface); - logger.debug('new() [url:"%s"]', url); this._url = url; this._sip_uri = null; this._via_transport = null; this._ws = null; var parsed_url = Grammar.parse(url, 'absoluteURI'); - if (parsed_url === -1) { logger.warn("invalid WebSocket URI: ".concat(url)); throw new TypeError("Invalid argument: ".concat(url)); @@ -25811,12 +22089,28 @@ module.exports = /*#__PURE__*/function () { this._via_transport = parsed_url.scheme.toUpperCase(); } } - - _createClass(WebSocketInterface, [{ + return _createClass(WebSocketInterface, [{ + key: "via_transport", + get: function get() { + return this._via_transport; + }, + set: function set(value) { + this._via_transport = value.toUpperCase(); + } + }, { + key: "sip_uri", + get: function get() { + return this._sip_uri; + } + }, { + key: "url", + get: function get() { + return this._url; + } + }, { key: "connect", value: function connect() { logger.debug('connect()'); - if (this.isConnected()) { logger.debug("WebSocket ".concat(this._url, " is already connected")); return; @@ -25824,13 +22118,10 @@ module.exports = /*#__PURE__*/function () { logger.debug("WebSocket ".concat(this._url, " is connecting")); return; } - if (this._ws) { this.disconnect(); } - logger.debug("connecting to WebSocket ".concat(this._url)); - try { this._ws = new WebSocket(this._url, 'sip'); this._ws.binaryType = 'arraybuffer'; @@ -25846,19 +22137,13 @@ module.exports = /*#__PURE__*/function () { key: "disconnect", value: function disconnect() { logger.debug('disconnect()'); - if (this._ws) { // Unbind websocket event callbacks. this._ws.onopen = function () {}; - this._ws.onclose = function () {}; - this._ws.onmessage = function () {}; - this._ws.onerror = function () {}; - this._ws.close(); - this._ws = null; } } @@ -25866,10 +22151,8 @@ module.exports = /*#__PURE__*/function () { key: "send", value: function send(message) { logger.debug('send()'); - if (this.isConnected()) { this._ws.send(message); - return true; } else { logger.warn('unable to send message, WebSocket is not open'); @@ -25886,10 +22169,10 @@ module.exports = /*#__PURE__*/function () { value: function isConnecting() { return this._ws && this._ws.readyState === this._ws.CONNECTING; } + /** * WebSocket Event Handlers */ - }, { key: "_onOpen", value: function _onOpen() { @@ -25900,14 +22183,12 @@ module.exports = /*#__PURE__*/function () { key: "_onClose", value: function _onClose(_ref) { var wasClean = _ref.wasClean, - code = _ref.code, - reason = _ref.reason; + code = _ref.code, + reason = _ref.reason; logger.debug("WebSocket ".concat(this._url, " closed")); - if (wasClean === false) { logger.debug('WebSocket abrupt disconnection'); } - this.ondisconnect(!wasClean, code, reason); } }, { @@ -25922,118 +22203,63 @@ module.exports = /*#__PURE__*/function () { value: function _onError(e) { logger.warn("WebSocket ".concat(this._url, " error: "), e); } - }, { - key: "via_transport", - get: function get() { - return this._via_transport; - }, - set: function set(value) { - this._via_transport = value.toUpperCase(); - } - }, { - key: "sip_uri", - get: function get() { - return this._sip_uri; - } - }, { - key: "url", - get: function get() { - return this._url; - } }]); - - return WebSocketInterface; }(); },{"./Grammar":7,"./Logger":9}],30:[function(require,module,exports){ "use strict"; -function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } - -function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } - -function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } - +function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; } +function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } +function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } var Logger = require('./Logger'); - var JsSIP_C = require('./Constants'); - var SIPMessage = require('./SIPMessage'); - var Utils = require('./Utils'); +var logger = new Logger('sanityCheck'); -var logger = new Logger('sanityCheck'); // Checks for requests and responses. +// Checks for requests and responses. +var all = [minimumHeaders]; -var all = [minimumHeaders]; // Checks for requests. +// Checks for requests. +var requests = [rfc3261_8_2_2_1, rfc3261_16_3_4, rfc3261_18_3_request, rfc3261_8_2_2_2]; -var requests = [rfc3261_8_2_2_1, rfc3261_16_3_4, rfc3261_18_3_request, rfc3261_8_2_2_2]; // Checks for responses. - -var responses = [rfc3261_8_1_3_3, rfc3261_18_3_response]; // local variables. +// Checks for responses. +var responses = [rfc3261_8_1_3_3, rfc3261_18_3_response]; +// local variables. var message; var ua; var transport; - module.exports = function (m, u, t) { message = m; ua = u; transport = t; - - var _iterator = _createForOfIteratorHelper(all), - _step; - - try { - for (_iterator.s(); !(_step = _iterator.n()).done;) { - var _check2 = _step.value; - - if (_check2() === false) { - return false; - } + for (var _i = 0, _all = all; _i < _all.length; _i++) { + var check = _all[_i]; + if (check() === false) { + return false; } - } catch (err) { - _iterator.e(err); - } finally { - _iterator.f(); } - if (message instanceof SIPMessage.IncomingRequest) { - var _iterator2 = _createForOfIteratorHelper(requests), - _step2; - - try { - for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { - var check = _step2.value; - - if (check() === false) { - return false; - } + for (var _i2 = 0, _requests = requests; _i2 < _requests.length; _i2++) { + var _check = _requests[_i2]; + if (_check() === false) { + return false; } - } catch (err) { - _iterator2.e(err); - } finally { - _iterator2.f(); } } else if (message instanceof SIPMessage.IncomingResponse) { - var _iterator3 = _createForOfIteratorHelper(responses), - _step3; - - try { - for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { - var _check = _step3.value; - - if (_check() === false) { - return false; - } + for (var _i3 = 0, _responses = responses; _i3 < _responses.length; _i3++) { + var _check2 = _responses[_i3]; + if (_check2() === false) { + return false; } - } catch (err) { - _iterator3.e(err); - } finally { - _iterator3.f(); } - } // Everything is OK. - + } + // Everything is OK. return true; }; + /* * Sanity Check for incoming Messages * @@ -26052,16 +22278,14 @@ module.exports = function (m, u, t) { * All: * - Minimum headers in a SIP message */ -// Sanity Check functions for requests. - +// Sanity Check functions for requests. function rfc3261_8_2_2_1() { if (message.s('to').uri.scheme !== 'sip') { reply(416); return false; } } - function rfc3261_16_3_4() { if (!message.to_tag) { if (message.call_id.substr(0, 5) === ua.configuration.jssip_id) { @@ -26070,126 +22294,119 @@ function rfc3261_16_3_4() { } } } - function rfc3261_18_3_request() { var len = Utils.str_utf8_length(message.body); var contentLength = message.getHeader('content-length'); - if (len < contentLength) { reply(400); return false; } } - function rfc3261_8_2_2_2() { var fromTag = message.from_tag; var call_id = message.call_id; var cseq = message.cseq; - var tr; // Accept any in-dialog request. + var tr; + // Accept any in-dialog request. if (message.to_tag) { return; - } // INVITE request. - + } + // INVITE request. if (message.method === JsSIP_C.INVITE) { // If the branch matches the key of any IST then assume it is a retransmission // and ignore the INVITE. // TODO: we should reply the last response. if (ua._transactions.ist[message.via_branch]) { return false; - } // Otherwise check whether it is a merged request. + } + // Otherwise check whether it is a merged request. else { - for (var transaction in ua._transactions.ist) { - if (Object.prototype.hasOwnProperty.call(ua._transactions.ist, transaction)) { - tr = ua._transactions.ist[transaction]; - - if (tr.request.from_tag === fromTag && tr.request.call_id === call_id && tr.request.cseq === cseq) { - reply(482); - return false; - } + for (var transaction in ua._transactions.ist) { + if (Object.prototype.hasOwnProperty.call(ua._transactions.ist, transaction)) { + tr = ua._transactions.ist[transaction]; + if (tr.request.from_tag === fromTag && tr.request.call_id === call_id && tr.request.cseq === cseq) { + reply(482); + return false; } } } - } // Non INVITE request. + } + } + + // Non INVITE request. + // If the branch matches the key of any NIST then assume it is a retransmission // and ignore the request. // TODO: we should reply the last response. else if (ua._transactions.nist[message.via_branch]) { - return false; - } // Otherwise check whether it is a merged request. - else { - for (var _transaction in ua._transactions.nist) { - if (Object.prototype.hasOwnProperty.call(ua._transactions.nist, _transaction)) { - tr = ua._transactions.nist[_transaction]; + return false; + } - if (tr.request.from_tag === fromTag && tr.request.call_id === call_id && tr.request.cseq === cseq) { - reply(482); - return false; - } - } + // Otherwise check whether it is a merged request. + else { + for (var _transaction in ua._transactions.nist) { + if (Object.prototype.hasOwnProperty.call(ua._transactions.nist, _transaction)) { + tr = ua._transactions.nist[_transaction]; + if (tr.request.from_tag === fromTag && tr.request.call_id === call_id && tr.request.cseq === cseq) { + reply(482); + return false; } } -} // Sanity Check functions for responses. - + } + } +} +// Sanity Check functions for responses. function rfc3261_8_1_3_3() { if (message.getHeaders('via').length > 1) { logger.debug('more than one Via header field present in the response, dropping the response'); return false; } } - function rfc3261_18_3_response() { var len = Utils.str_utf8_length(message.body), - contentLength = message.getHeader('content-length'); - + contentLength = message.getHeader('content-length'); if (len < contentLength) { logger.debug('message body length is lower than the value in Content-Length header field, dropping the response'); return false; } -} // Sanity Check functions for requests and responses. - +} +// Sanity Check functions for requests and responses. function minimumHeaders() { var mandatoryHeaders = ['from', 'to', 'call_id', 'cseq', 'via']; - - for (var _i = 0, _mandatoryHeaders = mandatoryHeaders; _i < _mandatoryHeaders.length; _i++) { - var header = _mandatoryHeaders[_i]; - + for (var _i4 = 0, _mandatoryHeaders = mandatoryHeaders; _i4 < _mandatoryHeaders.length; _i4++) { + var header = _mandatoryHeaders[_i4]; if (!message.hasHeader(header)) { logger.debug("missing mandatory header field : ".concat(header, ", dropping the response")); return false; } } -} // Reply. - +} +// Reply. function reply(status_code) { var vias = message.getHeaders('via'); var to; var response = "SIP/2.0 ".concat(status_code, " ").concat(JsSIP_C.REASON_PHRASE[status_code], "\r\n"); - - var _iterator4 = _createForOfIteratorHelper(vias), - _step4; - + var _iterator = _createForOfIteratorHelper(vias), + _step; try { - for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { - var via = _step4.value; + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var via = _step.value; response += "Via: ".concat(via, "\r\n"); } } catch (err) { - _iterator4.e(err); + _iterator.e(err); } finally { - _iterator4.f(); + _iterator.f(); } - to = message.getHeader('To'); - if (!message.to_tag) { to += ";tag=".concat(Utils.newTag()); } - response += "To: ".concat(to, "\r\n"); response += "From: ".concat(message.getHeader('From'), "\r\n"); response += "Call-ID: ".concat(message.call_id, "\r\n"); @@ -26723,19 +22940,28 @@ function functionBindPolyfill(context) { } },{}],32:[function(require,module,exports){ -(function (process){ +(function (process){(function (){ /* eslint-env browser */ /** * This is the web browser implementation of `debug()`. */ -exports.log = log; exports.formatArgs = formatArgs; exports.save = save; exports.load = load; exports.useColors = useColors; exports.storage = localstorage(); +exports.destroy = (() => { + let warned = false; + + return () => { + if (!warned) { + warned = true; + console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); + } + }; +})(); /** * Colors. @@ -26896,18 +23122,14 @@ function formatArgs(args) { } /** - * Invokes `console.log()` when available. - * No-op when `console.log` is not a "function". + * Invokes `console.debug()` when available. + * No-op when `console.debug` is not a "function". + * If `console.debug` is not available, falls back + * to `console.log`. * * @api public */ -function log(...args) { - // This hackery is required for IE8/9, where - // the `console.log` function doesn't have 'apply' - return typeof console === 'object' && - console.log && - console.log(...args); -} +exports.log = console.debug || console.log || (() => {}); /** * Save `namespaces`. @@ -26989,7 +23211,7 @@ formatters.j = function (v) { } }; -}).call(this,require('_process')) +}).call(this)}).call(this,require('_process')) },{"./common":33,"_process":35}],33:[function(require,module,exports){ /** @@ -27005,16 +23227,12 @@ function setup(env) { createDebug.enable = enable; createDebug.enabled = enabled; createDebug.humanize = require('ms'); + createDebug.destroy = destroy; Object.keys(env).forEach(key => { createDebug[key] = env[key]; }); - /** - * Active `debug` instances. - */ - createDebug.instances = []; - /** * The currently active debug mode names, and names to skip. */ @@ -27031,7 +23249,7 @@ function setup(env) { /** * Selects a color for a debug namespace - * @param {String} namespace The namespace string for the for the debug instance to be colored + * @param {String} namespace The namespace string for the debug instance to be colored * @return {Number|String} An ANSI color code for the given namespace * @api private */ @@ -27056,6 +23274,9 @@ function setup(env) { */ function createDebug(namespace) { let prevTime; + let enableOverride = null; + let namespacesCache; + let enabledCache; function debug(...args) { // Disabled? @@ -27085,7 +23306,7 @@ function setup(env) { args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => { // If we encounter an escaped % then don't increase the array index if (match === '%%') { - return match; + return '%'; } index++; const formatter = createDebug.formatters[format]; @@ -27108,33 +23329,38 @@ function setup(env) { } debug.namespace = namespace; - debug.enabled = createDebug.enabled(namespace); debug.useColors = createDebug.useColors(); - debug.color = selectColor(namespace); - debug.destroy = destroy; + debug.color = createDebug.selectColor(namespace); debug.extend = extend; - // Debug.formatArgs = formatArgs; - // debug.rawLog = rawLog; + debug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release. + + Object.defineProperty(debug, 'enabled', { + enumerable: true, + configurable: false, + get: () => { + if (enableOverride !== null) { + return enableOverride; + } + if (namespacesCache !== createDebug.namespaces) { + namespacesCache = createDebug.namespaces; + enabledCache = createDebug.enabled(namespace); + } + + return enabledCache; + }, + set: v => { + enableOverride = v; + } + }); - // env-specific initialization logic for debug instances + // Env-specific initialization logic for debug instances if (typeof createDebug.init === 'function') { createDebug.init(debug); } - createDebug.instances.push(debug); - return debug; } - function destroy() { - const index = createDebug.instances.indexOf(this); - if (index !== -1) { - createDebug.instances.splice(index, 1); - return true; - } - return false; - } - function extend(namespace, delimiter) { const newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace); newDebug.log = this.log; @@ -27150,6 +23376,7 @@ function setup(env) { */ function enable(namespaces) { createDebug.save(namespaces); + createDebug.namespaces = namespaces; createDebug.names = []; createDebug.skips = []; @@ -27167,16 +23394,11 @@ function setup(env) { namespaces = split[i].replace(/\*/g, '.*?'); if (namespaces[0] === '-') { - createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); + createDebug.skips.push(new RegExp('^' + namespaces.slice(1) + '$')); } else { createDebug.names.push(new RegExp('^' + namespaces + '$')); } } - - for (i = 0; i < createDebug.instances.length; i++) { - const instance = createDebug.instances[i]; - instance.enabled = createDebug.enabled(instance.namespace); - } } /** @@ -27251,6 +23473,14 @@ function setup(env) { return val; } + /** + * XXX DO NOT USE. This is a temporary stub function. + * XXX It WILL be removed in the next major release. + */ + function destroy() { + console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); + } + createDebug.enable(createDebug.load()); return createDebug; @@ -27704,7 +23934,7 @@ var grammar = module.exports = { push: 'rtcpFbTrrInt', reg: /^rtcp-fb:(\*|\d*) trr-int (\d*)/, names: ['payload', 'value'], - format: 'rtcp-fb:%d trr-int %d' + format: 'rtcp-fb:%s trr-int %d' }, { // a=rtcp-fb:98 nack rpsi @@ -28389,10 +24619,11 @@ module.exports={ "url": "https://github.com/versatica/JsSIP/issues" }, "dependencies": { - "@types/events": "^3.0.0", "@types/debug": "^4.1.7", + "@types/events": "^3.0.0", "debug": "^4.3.1", "events": "^3.3.0", + "gulp-cli": "^3.0.0", "sdp-transform": "^2.14.1" }, "devDependencies": { diff --git a/dist/jssip.min.js b/dist/jssip.min.js index 265e528b..a08d0eeb 100644 --- a/dist/jssip.min.js +++ b/dist/jssip.min.js @@ -1,9 +1,9 @@ /* * JsSIP v3.10.1 * the Javascript SIP library - * Copyright: 2012-2023 + * Copyright: 2012-2024 * Homepage: https://jssip.net * License: MIT */ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).JsSIP=e()}}(function(){return function(){return function e(t,n,r){function s(o,l){if(!n[o]){if(!t[o]){var u="function"==typeof require&&require;if(!l&&u)return u(o,!0);if(i)return i(o,!0);var a=new Error("Cannot find module '"+o+"'");throw a.code="MODULE_NOT_FOUND",a}var c=n[o]={exports:{}};t[o][0].call(c.exports,function(e){return s(t[o][1][e]||e)},c,c.exports,e,t,n,r)}return n[o].exports}for(var i="function"==typeof require&&require,o=0;o=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,l=!0,u=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return l=e.done,e},e:function(e){u=!0,o=e},f:function(){try{l||null==n.return||n.return()}finally{if(u)throw o}}}}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0)return t}},connection_recovery_min_interval:function(e){if(i.isDecimal(e)){var t=Number(e);if(t>0)return t}},contact_uri:function(e){if("string"==typeof e){var t=l.parse(e,"SIP_URI");if(-1!==t)return t}},display_name:function(e){return e},instance_id:function(e){return/^uuid:/i.test(e)&&(e=e.substr(5)),-1===l.parse(e,"uuid")?void 0:e},no_answer_timeout:function(e){if(i.isDecimal(e)){var t=Number(e);if(t>0)return t}},session_timers:function(e){if("boolean"==typeof e)return e},session_timers_refresh_method:function(e){if("string"==typeof e&&((e=e.toUpperCase())===o.INVITE||e===o.UPDATE))return e},session_timers_force_refresher:function(e){if("boolean"==typeof e)return e},password:function(e){return String(e)},realm:function(e){return String(e)},ha1:function(e){return String(e)},register:function(e){if("boolean"==typeof e)return e},register_expires:function(e){if(i.isDecimal(e)){var t=Number(e);if(t>0)return t}},registrar_server:function(e){/^sip:/i.test(e)||(e="".concat(o.SIP,":").concat(e));var t=u.parse(e);return t?t.user?void 0:t:void 0},use_preloaded_route:function(e){if("boolean"==typeof e)return e},extra_headers:function(e){var t=[];if(Array.isArray(e)&&e.length){var n,s=r(e);try{for(s.s();!(n=s.n()).done;){var i=n.value;"string"==typeof i&&t.push(i)}}catch(e){s.e(e)}finally{s.f()}return t}}}};n.load=function(e,t){for(var n in h.mandatory){if(!t.hasOwnProperty(n))throw new c.ConfigurationError(n);var r=t[n],s=h.mandatory[n](r);if(void 0===s)throw new c.ConfigurationError(n,r);e[n]=s}for(var o in h.optional)if(t.hasOwnProperty(o)){var l=t[o];if(i.isEmpty(l))continue;var u=h.optional[o](l);if(void 0===u)throw new c.ConfigurationError(o,l);e[o]=u}}},{"./Constants":2,"./Exceptions":6,"./Grammar":7,"./Socket":22,"./URI":27,"./Utils":28}],2:[function(e,t,n){"use strict";var r=e("../package.json");t.exports={USER_AGENT:"".concat(r.title," ").concat(r.version),SIP:"sip",SIPS:"sips",causes:{CONNECTION_ERROR:"Connection Error",REQUEST_TIMEOUT:"Request Timeout",SIP_FAILURE_CODE:"SIP Failure Code",INTERNAL_ERROR:"Internal Error",BUSY:"Busy",REJECTED:"Rejected",REDIRECTED:"Redirected",UNAVAILABLE:"Unavailable",NOT_FOUND:"Not Found",ADDRESS_INCOMPLETE:"Address Incomplete",INCOMPATIBLE_SDP:"Incompatible SDP",MISSING_SDP:"Missing SDP",AUTHENTICATION_ERROR:"Authentication Error",BYE:"Terminated",WEBRTC_ERROR:"WebRTC Error",CANCELED:"Canceled",NO_ANSWER:"No Answer",EXPIRES:"Expires",NO_ACK:"No ACK",DIALOG_ERROR:"Dialog Error",USER_DENIED_MEDIA_ACCESS:"User Denied Media Access",BAD_MEDIA_DESCRIPTION:"Bad Media Description",RTP_TIMEOUT:"RTP Timeout"},SIP_ERROR_CAUSES:{REDIRECTED:[300,301,302,305,380],BUSY:[486,600],REJECTED:[403,603],NOT_FOUND:[404,604],UNAVAILABLE:[480,410,408,430],ADDRESS_INCOMPLETE:[484,424],INCOMPATIBLE_SDP:[488,606],AUTHENTICATION_ERROR:[401,407]},ACK:"ACK",BYE:"BYE",CANCEL:"CANCEL",INFO:"INFO",INVITE:"INVITE",MESSAGE:"MESSAGE",NOTIFY:"NOTIFY",OPTIONS:"OPTIONS",REGISTER:"REGISTER",REFER:"REFER",UPDATE:"UPDATE",SUBSCRIBE:"SUBSCRIBE",DTMF_TRANSPORT:{INFO:"INFO",RFC2833:"RFC2833"},REASON_PHRASE:{100:"Trying",180:"Ringing",181:"Call Is Being Forwarded",182:"Queued",183:"Session Progress",199:"Early Dialog Terminated",200:"OK",202:"Accepted",204:"No Notification",300:"Multiple Choices",301:"Moved Permanently",302:"Moved Temporarily",305:"Use Proxy",380:"Alternative Service",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",410:"Gone",412:"Conditional Request Failed",413:"Request Entity Too Large",414:"Request-URI Too Long",415:"Unsupported Media Type",416:"Unsupported URI Scheme",417:"Unknown Resource-Priority",420:"Bad Extension",421:"Extension Required",422:"Session Interval Too Small",423:"Interval Too Brief",424:"Bad Location Information",428:"Use Identity Header",429:"Provide Referrer Identity",430:"Flow Failed",433:"Anonymity Disallowed",436:"Bad Identity-Info",437:"Unsupported Certificate",438:"Invalid Identity Header",439:"First Hop Lacks Outbound Support",440:"Max-Breadth Exceeded",469:"Bad Info Package",470:"Consent Needed",478:"Unresolvable Destination",480:"Temporarily Unavailable",481:"Call/Transaction Does Not Exist",482:"Loop Detected",483:"Too Many Hops",484:"Address Incomplete",485:"Ambiguous",486:"Busy Here",487:"Request Terminated",488:"Not Acceptable Here",489:"Bad Event",491:"Request Pending",493:"Undecipherable",494:"Security Agreement Required",500:"JsSIP Internal Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Server Time-out",505:"Version Not Supported",513:"Message Too Large",580:"Precondition Failure",600:"Busy Everywhere",603:"Decline",604:"Does Not Exist Anywhere",606:"Not Acceptable"},ALLOWED_METHODS:"INVITE,ACK,CANCEL,BYE,UPDATE,MESSAGE,OPTIONS,REFER,INFO,NOTIFY",ACCEPTED_BODY_TYPES:"application/sdp, application/dtmf-relay",MAX_FORWARDS:69,SESSION_EXPIRES:90,MIN_SESSION_EXPIRES:60,CONNECTION_RECOVERY_MAX_INTERVAL:30,CONNECTION_RECOVERY_MIN_INTERVAL:2}},{"../package.json":40}],3:[function(e,t,n){"use strict";function r(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:d.STATUS_CONFIRMED;if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._owner=t,this._ua=t._ua,this._uac_pending_reply=!1,this._uas_pending_reply=!1,!n.hasHeader("contact"))return{error:"unable to create a Dialog without Contact header field"};n instanceof o.IncomingResponse&&(s=n.status_code<200?d.STATUS_EARLY:d.STATUS_CONFIRMED);var i=n.parseHeader("contact");"UAS"===r?(this._id={call_id:n.call_id,local_tag:n.to_tag,remote_tag:n.from_tag,toString:function(){return this.call_id+this.local_tag+this.remote_tag}},this._state=s,this._remote_seqnum=n.cseq,this._local_uri=n.parseHeader("to").uri,this._remote_uri=n.parseHeader("from").uri,this._remote_target=i.uri,this._route_set=n.getHeaders("record-route"),this._ack_seqnum=this._remote_seqnum):"UAC"===r&&(this._id={call_id:n.call_id,local_tag:n.from_tag,remote_tag:n.to_tag,toString:function(){return this.call_id+this.local_tag+this.remote_tag}},this._state=s,this._local_seqnum=n.cseq,this._local_uri=n.parseHeader("from").uri,this._remote_uri=n.parseHeader("to").uri,this._remote_target=i.uri,this._route_set=n.getHeaders("record-route").reverse(),this._ack_seqnum=null),this._ua.newDialog(this),h.debug("new ".concat(r," dialog created with status ").concat(this._state===d.STATUS_EARLY?"EARLY":"CONFIRMED"))}return s(e,null,[{key:"C",get:function(){return d}}]),s(e,[{key:"isTerminated",value:function(){return this._status===d.STATUS_TERMINATED}},{key:"update",value:function(e,t){this._state=d.STATUS_CONFIRMED,h.debug("dialog ".concat(this._id.toString()," changed to CONFIRMED state")),"UAC"===t&&(this._route_set=e.getHeaders("record-route").reverse())}},{key:"terminate",value:function(){h.debug("dialog ".concat(this._id.toString()," deleted")),this._ua.destroyDialog(this),this._state=d.STATUS_TERMINATED}},{key:"sendRequest",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=c.cloneArray(n.extraHeaders),s=c.cloneObject(n.eventHandlers),i=n.body||null,o=this._createRequest(e,r,i);return s.onAuthenticated=function(){t._local_seqnum+=1},new a(this,o,s).send(),o}},{key:"receiveRequest",value:function(e){this._checkInDialogRequest(e)&&(e.method===l.ACK&&null!==this._ack_seqnum?this._ack_seqnum=null:e.method===l.INVITE&&(this._ack_seqnum=e.cseq),this._owner.receiveRequest(e))}},{key:"_createRequest",value:function(e,t,n){t=c.cloneArray(t),this._local_seqnum||(this._local_seqnum=Math.floor(1e4*Math.random()));var r=e===l.CANCEL||e===l.ACK?this._local_seqnum:this._local_seqnum+=1;return new o.OutgoingRequest(e,this._remote_target,this._ua,{cseq:r,call_id:this._id.call_id,from_uri:this._local_uri,from_tag:this._id.local_tag,to_uri:this._remote_uri,to_tag:this._id.remote_tag,route_set:this._route_set},t,n)}},{key:"_checkInDialogRequest",value:function(e){var t=this;if(this._remote_seqnum)if(e.cseqthis._remote_seqnum&&(this._remote_seqnum=e.cseq);else this._remote_seqnum=e.cseq;if(e.method===l.INVITE||e.method===l.UPDATE&&e.body){if(!0===this._uac_pending_reply)e.reply(491);else{if(!0===this._uas_pending_reply){var n=1+(10*Math.random()|0);return e.reply(500,null,["Retry-After:".concat(n)]),!1}this._uas_pending_reply=!0;e.server_transaction.on("stateChanged",function n(){e.server_transaction.state!==u.C.STATUS_ACCEPTED&&e.server_transaction.state!==u.C.STATUS_COMPLETED&&e.server_transaction.state!==u.C.STATUS_TERMINATED||(e.server_transaction.removeListener("stateChanged",n),t._uas_pending_reply=!1)})}e.hasHeader("contact")&&e.server_transaction.on("stateChanged",function(){e.server_transaction.state===u.C.STATUS_ACCEPTED&&(t._remote_target=e.parseHeader("contact").uri)})}else e.method===l.NOTIFY&&e.hasHeader("contact")&&e.server_transaction.on("stateChanged",function(){e.server_transaction.state===u.C.STATUS_COMPLETED&&(t._remote_target=e.parseHeader("contact").uri)});return!0}},{key:"id",get:function(){return this._id}},{key:"local_seqnum",get:function(){return this._local_seqnum},set:function(e){this._local_seqnum=e}},{key:"owner",get:function(){return this._owner}},{key:"uac_pending_reply",get:function(){return this._uac_pending_reply},set:function(e){this._uac_pending_reply=e}},{key:"uas_pending_reply",get:function(){return this._uas_pending_reply}}]),e}()},{"./Constants":2,"./Dialog/RequestSender":4,"./Logger":9,"./SIPMessage":21,"./Transactions":24,"./Utils":28}],4:[function(e,t,n){"use strict";function r(e,t){for(var n=0;n=200&&e.status_code<300?this._eventHandlers.onSuccessResponse(e):e.status_code>=300&&this._eventHandlers.onErrorResponse(e):(this._request.cseq=this._dialog.local_seqnum+=1,this._reattemptTimer=setTimeout(function(){t._dialog.isTerminated()||(t._reattempt=!0,t.send())},1e3)):e.status_code>=200&&e.status_code<300?this._eventHandlers.onSuccessResponse(e):e.status_code>=300&&this._eventHandlers.onErrorResponse(e)}},{key:"request",get:function(){return this._request}}])&&r(t.prototype,n),u&&r(t,u),e}()},{"../Constants":2,"../RequestSender":20,"../Transactions":24}],5:[function(e,t,n){"use strict";function r(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:null;if(this._algorithm=t.algorithm,this._realm=t.realm,this._nonce=t.nonce,this._opaque=t.opaque,this._stale=t.stale,this._algorithm){if("MD5"!==this._algorithm)return o.warn('authenticate() | challenge with Digest algorithm different than "MD5", authentication aborted'),!1}else this._algorithm="MD5";if(!this._nonce)return o.warn("authenticate() | challenge without Digest nonce, authentication aborted"),!1;if(!this._realm)return o.warn("authenticate() | challenge without Digest realm, authentication aborted"),!1;if(!this._credentials.password){if(!this._credentials.ha1)return o.warn("authenticate() | no plain SIP password nor ha1 provided, authentication aborted"),!1;if(this._credentials.realm!==this._realm)return o.warn('authenticate() | no plain SIP password, and stored `realm` does not match the given `realm`, cannot authenticate [stored:"%s", given:"%s"]',this._credentials.realm,this._realm),!1}if(t.qop)if(t.qop.indexOf("auth-int")>-1)this._qop="auth-int";else{if(!(t.qop.indexOf("auth")>-1))return o.warn('authenticate() | challenge without Digest qop different than "auth" or "auth-int", authentication aborted'),!1;this._qop="auth"}else this._qop=null;this._method=n,this._uri=r,this._cnonce=l||i.createRandomToken(12),this._nc+=1;var u,a,c=Number(this._nc).toString(16);return this._ncHex="00000000".substr(0,8-c.length)+c,4294967296===this._nc&&(this._nc=1,this._ncHex="00000001"),this._credentials.password?this._ha1=i.calculateMD5("".concat(this._credentials.username,":").concat(this._realm,":").concat(this._credentials.password)):this._ha1=this._credentials.ha1,"auth"===this._qop?(u="".concat(this._method,":").concat(this._uri),a=i.calculateMD5(u),o.debug('authenticate() | using qop=auth [a2:"%s"]',u),this._response=i.calculateMD5("".concat(this._ha1,":").concat(this._nonce,":").concat(this._ncHex,":").concat(this._cnonce,":auth:").concat(a))):"auth-int"===this._qop?(u="".concat(this._method,":").concat(this._uri,":").concat(i.calculateMD5(s||"")),a=i.calculateMD5(u),o.debug('authenticate() | using qop=auth-int [a2:"%s"]',u),this._response=i.calculateMD5("".concat(this._ha1,":").concat(this._nonce,":").concat(this._ncHex,":").concat(this._cnonce,":auth-int:").concat(a))):null===this._qop&&(u="".concat(this._method,":").concat(this._uri),a=i.calculateMD5(u),o.debug('authenticate() | using qop=null [a2:"%s"]',u),this._response=i.calculateMD5("".concat(this._ha1,":").concat(this._nonce,":").concat(a))),o.debug("authenticate() | response generated"),!0}},{key:"toString",value:function(){var e=[];if(!this._response)throw new Error("response field does not exist, cannot generate Authorization header");return e.push("algorithm=".concat(this._algorithm)),e.push('username="'.concat(this._credentials.username,'"')),e.push('realm="'.concat(this._realm,'"')),e.push('nonce="'.concat(this._nonce,'"')),e.push('uri="'.concat(this._uri,'"')),e.push('response="'.concat(this._response,'"')),this._opaque&&e.push('opaque="'.concat(this._opaque,'"')),this._qop&&(e.push("qop=".concat(this._qop)),e.push('cnonce="'.concat(this._cnonce,'"')),e.push("nc=".concat(this._ncHex))),"Digest ".concat(e.join(", "))}}])&&r(t.prototype,n),s&&r(t,s),e}()},{"./Logger":9,"./Utils":28}],6:[function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}function o(e){var t=a();return function(){var n,s=h(e);if(t){var i=h(this).constructor;n=Reflect.construct(s,arguments,i)}else n=s.apply(this,arguments);return function(e,t){if(t&&("object"===r(t)||"function"==typeof t))return t;return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(this,n)}}function l(e){var t="function"==typeof Map?new Map:void 0;return(l=function(e){if(null===e||(n=e,-1===Function.toString.call(n).indexOf("[native code]")))return e;var n;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,r)}function r(){return u(e,arguments,h(this).constructor)}return r.prototype=Object.create(e.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),c(r,e)})(e)}function u(e,t,n){return(u=a()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var s=new(Function.bind.apply(e,r));return n&&c(s,n.prototype),s}).apply(null,arguments)}function a(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(e){return!1}}function c(e,t){return(c=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function h(e){return(h=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var d=function(e){i(n,l(Error));var t=o(n);function n(e,r){var i;return s(this,n),(i=t.call(this)).code=1,i.name="CONFIGURATION_ERROR",i.parameter=e,i.value=r,i.message=i.value?"Invalid value ".concat(JSON.stringify(i.value),' for parameter "').concat(i.parameter,'"'):"Missing parameter: ".concat(i.parameter),i}return n}(),f=function(e){i(n,l(Error));var t=o(n);function n(e){var r;return s(this,n),(r=t.call(this)).code=2,r.name="INVALID_STATE_ERROR",r.status=e,r.message="Invalid status: ".concat(e),r}return n}(),_=function(e){i(n,l(Error));var t=o(n);function n(e){var r;return s(this,n),(r=t.call(this)).code=3,r.name="NOT_SUPPORTED_ERROR",r.message=e,r}return n}(),p=function(e){i(n,l(Error));var t=o(n);function n(e){var r;return s(this,n),(r=t.call(this)).code=4,r.name="NOT_READY_ERROR",r.message=e,r}return n}();t.exports={ConfigurationError:d,InvalidStateError:f,NotSupportedError:_,NotReadyError:p}},{}],7:[function(e,t,n){"use strict";t.exports=function(){function t(e){return'"'+e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E-\x1F\x80-\uFFFF]/g,escape)+'"'}var n={parse:function(n,r){var s={CRLF:c,DIGIT:h,ALPHA:d,HEXDIG:f,WSP:_,OCTET:p,DQUOTE:m,SP:v,HTAB:g,alphanum:y,reserved:T,unreserved:C,mark:b,escaped:S,LWS:E,SWS:A,HCOLON:R,TEXT_UTF8_TRIM:w,TEXT_UTF8char:I,UTF8_NONASCII:O,UTF8_CONT:k,LHEX:function(){var e;null===(e=h())&&(/^[a-f]/.test(n.charAt(i))?(e=n.charAt(i),i++):(e=null,0===o&&a("[a-f]")));return e},token:N,token_nodot:U,separators:function(){var e;40===n.charCodeAt(i)?(e="(",i++):(e=null,0===o&&a('"("'));null===e&&(41===n.charCodeAt(i)?(e=")",i++):(e=null,0===o&&a('")"')),null===e&&(60===n.charCodeAt(i)?(e="<",i++):(e=null,0===o&&a('"<"')),null===e&&(62===n.charCodeAt(i)?(e=">",i++):(e=null,0===o&&a('">"')),null===e&&(64===n.charCodeAt(i)?(e="@",i++):(e=null,0===o&&a('"@"')),null===e&&(44===n.charCodeAt(i)?(e=",",i++):(e=null,0===o&&a('","')),null===e&&(59===n.charCodeAt(i)?(e=";",i++):(e=null,0===o&&a('";"')),null===e&&(58===n.charCodeAt(i)?(e=":",i++):(e=null,0===o&&a('":"')),null===e&&(92===n.charCodeAt(i)?(e="\\",i++):(e=null,0===o&&a('"\\\\"')),null===e&&null===(e=m())&&(47===n.charCodeAt(i)?(e="/",i++):(e=null,0===o&&a('"/"')),null===e&&(91===n.charCodeAt(i)?(e="[",i++):(e=null,0===o&&a('"["')),null===e&&(93===n.charCodeAt(i)?(e="]",i++):(e=null,0===o&&a('"]"')),null===e&&(63===n.charCodeAt(i)?(e="?",i++):(e=null,0===o&&a('"?"')),null===e&&(61===n.charCodeAt(i)?(e="=",i++):(e=null,0===o&&a('"="')),null===e&&(123===n.charCodeAt(i)?(e="{",i++):(e=null,0===o&&a('"{"')),null===e&&(125===n.charCodeAt(i)?(e="}",i++):(e=null,0===o&&a('"}"')),null===e&&null===(e=v())&&(e=g()))))))))))))))));return e},word:x,STAR:D,SLASH:P,EQUAL:M,LPAREN:q,RPAREN:L,RAQUOT:H,LAQUOT:F,COMMA:j,SEMI:G,COLON:W,LDQUOT:V,RDQUOT:B,comment:function e(){var t,n,r;var s;s=i;t=q();if(null!==t){for(n=[],null===(r=K())&&null===(r=X())&&(r=e());null!==r;)n.push(r),null===(r=K())&&null===(r=X())&&(r=e());null!==n&&null!==(r=L())?t=[t,n,r]:(t=null,i=s)}else t=null,i=s;return t},ctext:K,quoted_string:z,quoted_string_clean:Y,qdtext:$,quoted_pair:X,SIP_URI_noparams:J,SIP_URI:Q,uri_scheme:Z,uri_scheme_sips:ee,uri_scheme_sip:te,userinfo:ne,user:re,user_unreserved:se,password:ie,hostport:oe,host:le,hostname:ue,domainlabel:ae,toplabel:ce,IPv6reference:he,IPv6address:de,h16:fe,ls32:_e,IPv4address:pe,dec_octet:me,port:ve,uri_parameters:ge,uri_parameter:ye,transport_param:Te,user_param:Ce,method_param:be,ttl_param:Se,maddr_param:Ee,lr_param:Ae,other_param:Re,pname:we,pvalue:Ie,paramchar:Oe,param_unreserved:ke,headers:Ne,header:Ue,hname:xe,hvalue:De,hnv_unreserved:Pe,Request_Response:function(){var e;null===(e=ht())&&(e=Me());return e},Request_Line:Me,Request_URI:qe,absoluteURI:Le,hier_part:He,net_path:Fe,abs_path:je,opaque_part:Ge,uric:We,uric_no_slash:Ve,path_segments:Be,segment:Ke,param:ze,pchar:Ye,scheme:$e,authority:Xe,srvr:Je,reg_name:Qe,query:Ze,SIP_Version:et,INVITEm:tt,ACKm:nt,OPTIONSm:rt,BYEm:st,CANCELm:it,REGISTERm:ot,SUBSCRIBEm:lt,NOTIFYm:ut,REFERm:at,Method:ct,Status_Line:ht,Status_Code:dt,extension_code:ft,Reason_Phrase:_t,Allow_Events:function(){var e,t,n,r,s,o;if(s=i,null!==(e=Lt())){for(t=[],o=i,null!==(n=j())&&null!==(r=Lt())?n=[n,r]:(n=null,i=o);null!==n;)t.push(n),o=i,null!==(n=j())&&null!==(r=Lt())?n=[n,r]:(n=null,i=o);null!==t?e=[e,t]:(e=null,i=s)}else e=null,i=s;return e},Call_ID:function(){var e,t,r,s,l,u;s=i,l=i,null!==(e=x())?(u=i,64===n.charCodeAt(i)?(t="@",i++):(t=null,0===o&&a('"@"')),null!==t&&null!==(r=x())?t=[t,r]:(t=null,i=u),null!==(t=null!==t?t:"")?e=[e,t]:(e=null,i=l)):(e=null,i=l);null!==e&&(c=s,e=void(jn=n.substring(i,c)));var c;null===e&&(i=s);return e},Contact:function(){var e,t,n,r,s,o,l;if(s=i,null===(e=D()))if(o=i,null!==(e=pt())){for(t=[],l=i,null!==(n=j())&&null!==(r=pt())?n=[n,r]:(n=null,i=l);null!==n;)t.push(n),l=i,null!==(n=j())&&null!==(r=pt())?n=[n,r]:(n=null,i=l);null!==t?e=[e,t]:(e=null,i=o)}else e=null,i=o;null!==e&&(e=function(e){var t,n;for(n=jn.multi_header.length,t=0;tl&&(l=i,u=[]),u.push(e))}function c(){var e;return"\r\n"===n.substr(i,2)?(e="\r\n",i+=2):(e=null,0===o&&a('"\\r\\n"')),e}function h(){var e;return/^[0-9]/.test(n.charAt(i))?(e=n.charAt(i),i++):(e=null,0===o&&a("[0-9]")),e}function d(){var e;return/^[a-zA-Z]/.test(n.charAt(i))?(e=n.charAt(i),i++):(e=null,0===o&&a("[a-zA-Z]")),e}function f(){var e;return/^[0-9a-fA-F]/.test(n.charAt(i))?(e=n.charAt(i),i++):(e=null,0===o&&a("[0-9a-fA-F]")),e}function _(){var e;return null===(e=v())&&(e=g()),e}function p(){var e;return/^[\0-\xFF]/.test(n.charAt(i))?(e=n.charAt(i),i++):(e=null,0===o&&a("[\\0-\\xFF]")),e}function m(){var e;return/^["]/.test(n.charAt(i))?(e=n.charAt(i),i++):(e=null,0===o&&a('["]')),e}function v(){var e;return 32===n.charCodeAt(i)?(e=" ",i++):(e=null,0===o&&a('" "')),e}function g(){var e;return 9===n.charCodeAt(i)?(e="\t",i++):(e=null,0===o&&a('"\\t"')),e}function y(){var e;return/^[a-zA-Z0-9]/.test(n.charAt(i))?(e=n.charAt(i),i++):(e=null,0===o&&a("[a-zA-Z0-9]")),e}function T(){var e;return 59===n.charCodeAt(i)?(e=";",i++):(e=null,0===o&&a('";"')),null===e&&(47===n.charCodeAt(i)?(e="/",i++):(e=null,0===o&&a('"/"')),null===e&&(63===n.charCodeAt(i)?(e="?",i++):(e=null,0===o&&a('"?"')),null===e&&(58===n.charCodeAt(i)?(e=":",i++):(e=null,0===o&&a('":"')),null===e&&(64===n.charCodeAt(i)?(e="@",i++):(e=null,0===o&&a('"@"')),null===e&&(38===n.charCodeAt(i)?(e="&",i++):(e=null,0===o&&a('"&"')),null===e&&(61===n.charCodeAt(i)?(e="=",i++):(e=null,0===o&&a('"="')),null===e&&(43===n.charCodeAt(i)?(e="+",i++):(e=null,0===o&&a('"+"')),null===e&&(36===n.charCodeAt(i)?(e="$",i++):(e=null,0===o&&a('"$"')),null===e&&(44===n.charCodeAt(i)?(e=",",i++):(e=null,0===o&&a('","'))))))))))),e}function C(){var e;return null===(e=y())&&(e=b()),e}function b(){var e;return 45===n.charCodeAt(i)?(e="-",i++):(e=null,0===o&&a('"-"')),null===e&&(95===n.charCodeAt(i)?(e="_",i++):(e=null,0===o&&a('"_"')),null===e&&(46===n.charCodeAt(i)?(e=".",i++):(e=null,0===o&&a('"."')),null===e&&(33===n.charCodeAt(i)?(e="!",i++):(e=null,0===o&&a('"!"')),null===e&&(126===n.charCodeAt(i)?(e="~",i++):(e=null,0===o&&a('"~"')),null===e&&(42===n.charCodeAt(i)?(e="*",i++):(e=null,0===o&&a('"*"')),null===e&&(39===n.charCodeAt(i)?(e="'",i++):(e=null,0===o&&a('"\'"')),null===e&&(40===n.charCodeAt(i)?(e="(",i++):(e=null,0===o&&a('"("')),null===e&&(41===n.charCodeAt(i)?(e=")",i++):(e=null,0===o&&a('")"')))))))))),e}function S(){var e,t,r,s,l;return s=i,l=i,37===n.charCodeAt(i)?(e="%",i++):(e=null,0===o&&a('"%"')),null!==e&&null!==(t=f())&&null!==(r=f())?e=[e,t,r]:(e=null,i=l),null!==e&&(e=e.join("")),null===e&&(i=s),e}function E(){var e,t,n,r,s,o;for(r=i,s=i,o=i,e=[],t=_();null!==t;)e.push(t),t=_();if(null!==e&&null!==(t=c())?e=[e,t]:(e=null,i=o),null!==(e=null!==e?e:"")){if(null!==(n=_()))for(t=[];null!==n;)t.push(n),n=_();else t=null;null!==t?e=[e,t]:(e=null,i=s)}else e=null,i=s;return null!==e&&(e=" "),null===e&&(i=r),e}function A(){var e;return e=null!==(e=E())?e:""}function R(){var e,t,r,s,l;for(s=i,l=i,e=[],null===(t=v())&&(t=g());null!==t;)e.push(t),null===(t=v())&&(t=g());return null!==e?(58===n.charCodeAt(i)?(t=":",i++):(t=null,0===o&&a('":"')),null!==t&&null!==(r=A())?e=[e,t,r]:(e=null,i=l)):(e=null,i=l),null!==e&&(e=":"),null===e&&(i=s),e}function w(){var e,t,r,s,o,l,u,a;if(o=i,l=i,null!==(t=I()))for(e=[];null!==t;)e.push(t),t=I();else e=null;if(null!==e){for(t=[],u=i,r=[],s=E();null!==s;)r.push(s),s=E();for(null!==r&&null!==(s=I())?r=[r,s]:(r=null,i=u);null!==r;){for(t.push(r),u=i,r=[],s=E();null!==s;)r.push(s),s=E();null!==r&&null!==(s=I())?r=[r,s]:(r=null,i=u)}null!==t?e=[e,t]:(e=null,i=l)}else e=null,i=l;return null!==e&&(a=o,e=n.substring(i,a)),null===e&&(i=o),e}function I(){var e;return/^[!-~]/.test(n.charAt(i))?(e=n.charAt(i),i++):(e=null,0===o&&a("[!-~]")),null===e&&(e=O()),e}function O(){var e;return/^[\x80-\uFFFF]/.test(n.charAt(i))?(e=n.charAt(i),i++):(e=null,0===o&&a("[\\x80-\\uFFFF]")),e}function k(){var e;return/^[\x80-\xBF]/.test(n.charAt(i))?(e=n.charAt(i),i++):(e=null,0===o&&a("[\\x80-\\xBF]")),e}function N(){var e,t,r,s;if(r=i,null===(t=y())&&(45===n.charCodeAt(i)?(t="-",i++):(t=null,0===o&&a('"-"')),null===t&&(46===n.charCodeAt(i)?(t=".",i++):(t=null,0===o&&a('"."')),null===t&&(33===n.charCodeAt(i)?(t="!",i++):(t=null,0===o&&a('"!"')),null===t&&(37===n.charCodeAt(i)?(t="%",i++):(t=null,0===o&&a('"%"')),null===t&&(42===n.charCodeAt(i)?(t="*",i++):(t=null,0===o&&a('"*"')),null===t&&(95===n.charCodeAt(i)?(t="_",i++):(t=null,0===o&&a('"_"')),null===t&&(43===n.charCodeAt(i)?(t="+",i++):(t=null,0===o&&a('"+"')),null===t&&(96===n.charCodeAt(i)?(t="`",i++):(t=null,0===o&&a('"`"')),null===t&&(39===n.charCodeAt(i)?(t="'",i++):(t=null,0===o&&a('"\'"')),null===t&&(126===n.charCodeAt(i)?(t="~",i++):(t=null,0===o&&a('"~"')))))))))))),null!==t)for(e=[];null!==t;)e.push(t),null===(t=y())&&(45===n.charCodeAt(i)?(t="-",i++):(t=null,0===o&&a('"-"')),null===t&&(46===n.charCodeAt(i)?(t=".",i++):(t=null,0===o&&a('"."')),null===t&&(33===n.charCodeAt(i)?(t="!",i++):(t=null,0===o&&a('"!"')),null===t&&(37===n.charCodeAt(i)?(t="%",i++):(t=null,0===o&&a('"%"')),null===t&&(42===n.charCodeAt(i)?(t="*",i++):(t=null,0===o&&a('"*"')),null===t&&(95===n.charCodeAt(i)?(t="_",i++):(t=null,0===o&&a('"_"')),null===t&&(43===n.charCodeAt(i)?(t="+",i++):(t=null,0===o&&a('"+"')),null===t&&(96===n.charCodeAt(i)?(t="`",i++):(t=null,0===o&&a('"`"')),null===t&&(39===n.charCodeAt(i)?(t="'",i++):(t=null,0===o&&a('"\'"')),null===t&&(126===n.charCodeAt(i)?(t="~",i++):(t=null,0===o&&a('"~"'))))))))))));else e=null;return null!==e&&(s=r,e=n.substring(i,s)),null===e&&(i=r),e}function U(){var e,t,r,s;if(r=i,null===(t=y())&&(45===n.charCodeAt(i)?(t="-",i++):(t=null,0===o&&a('"-"')),null===t&&(33===n.charCodeAt(i)?(t="!",i++):(t=null,0===o&&a('"!"')),null===t&&(37===n.charCodeAt(i)?(t="%",i++):(t=null,0===o&&a('"%"')),null===t&&(42===n.charCodeAt(i)?(t="*",i++):(t=null,0===o&&a('"*"')),null===t&&(95===n.charCodeAt(i)?(t="_",i++):(t=null,0===o&&a('"_"')),null===t&&(43===n.charCodeAt(i)?(t="+",i++):(t=null,0===o&&a('"+"')),null===t&&(96===n.charCodeAt(i)?(t="`",i++):(t=null,0===o&&a('"`"')),null===t&&(39===n.charCodeAt(i)?(t="'",i++):(t=null,0===o&&a('"\'"')),null===t&&(126===n.charCodeAt(i)?(t="~",i++):(t=null,0===o&&a('"~"'))))))))))),null!==t)for(e=[];null!==t;)e.push(t),null===(t=y())&&(45===n.charCodeAt(i)?(t="-",i++):(t=null,0===o&&a('"-"')),null===t&&(33===n.charCodeAt(i)?(t="!",i++):(t=null,0===o&&a('"!"')),null===t&&(37===n.charCodeAt(i)?(t="%",i++):(t=null,0===o&&a('"%"')),null===t&&(42===n.charCodeAt(i)?(t="*",i++):(t=null,0===o&&a('"*"')),null===t&&(95===n.charCodeAt(i)?(t="_",i++):(t=null,0===o&&a('"_"')),null===t&&(43===n.charCodeAt(i)?(t="+",i++):(t=null,0===o&&a('"+"')),null===t&&(96===n.charCodeAt(i)?(t="`",i++):(t=null,0===o&&a('"`"')),null===t&&(39===n.charCodeAt(i)?(t="'",i++):(t=null,0===o&&a('"\'"')),null===t&&(126===n.charCodeAt(i)?(t="~",i++):(t=null,0===o&&a('"~"')))))))))));else e=null;return null!==e&&(s=r,e=n.substring(i,s)),null===e&&(i=r),e}function x(){var e,t,r,s;if(r=i,null===(t=y())&&(45===n.charCodeAt(i)?(t="-",i++):(t=null,0===o&&a('"-"')),null===t&&(46===n.charCodeAt(i)?(t=".",i++):(t=null,0===o&&a('"."')),null===t&&(33===n.charCodeAt(i)?(t="!",i++):(t=null,0===o&&a('"!"')),null===t&&(37===n.charCodeAt(i)?(t="%",i++):(t=null,0===o&&a('"%"')),null===t&&(42===n.charCodeAt(i)?(t="*",i++):(t=null,0===o&&a('"*"')),null===t&&(95===n.charCodeAt(i)?(t="_",i++):(t=null,0===o&&a('"_"')),null===t&&(43===n.charCodeAt(i)?(t="+",i++):(t=null,0===o&&a('"+"')),null===t&&(96===n.charCodeAt(i)?(t="`",i++):(t=null,0===o&&a('"`"')),null===t&&(39===n.charCodeAt(i)?(t="'",i++):(t=null,0===o&&a('"\'"')),null===t&&(126===n.charCodeAt(i)?(t="~",i++):(t=null,0===o&&a('"~"')),null===t&&(40===n.charCodeAt(i)?(t="(",i++):(t=null,0===o&&a('"("')),null===t&&(41===n.charCodeAt(i)?(t=")",i++):(t=null,0===o&&a('")"')),null===t&&(60===n.charCodeAt(i)?(t="<",i++):(t=null,0===o&&a('"<"')),null===t&&(62===n.charCodeAt(i)?(t=">",i++):(t=null,0===o&&a('">"')),null===t&&(58===n.charCodeAt(i)?(t=":",i++):(t=null,0===o&&a('":"')),null===t&&(92===n.charCodeAt(i)?(t="\\",i++):(t=null,0===o&&a('"\\\\"')),null===t&&null===(t=m())&&(47===n.charCodeAt(i)?(t="/",i++):(t=null,0===o&&a('"/"')),null===t&&(91===n.charCodeAt(i)?(t="[",i++):(t=null,0===o&&a('"["')),null===t&&(93===n.charCodeAt(i)?(t="]",i++):(t=null,0===o&&a('"]"')),null===t&&(63===n.charCodeAt(i)?(t="?",i++):(t=null,0===o&&a('"?"')),null===t&&(123===n.charCodeAt(i)?(t="{",i++):(t=null,0===o&&a('"{"')),null===t&&(125===n.charCodeAt(i)?(t="}",i++):(t=null,0===o&&a('"}"')))))))))))))))))))))))),null!==t)for(e=[];null!==t;)e.push(t),null===(t=y())&&(45===n.charCodeAt(i)?(t="-",i++):(t=null,0===o&&a('"-"')),null===t&&(46===n.charCodeAt(i)?(t=".",i++):(t=null,0===o&&a('"."')),null===t&&(33===n.charCodeAt(i)?(t="!",i++):(t=null,0===o&&a('"!"')),null===t&&(37===n.charCodeAt(i)?(t="%",i++):(t=null,0===o&&a('"%"')),null===t&&(42===n.charCodeAt(i)?(t="*",i++):(t=null,0===o&&a('"*"')),null===t&&(95===n.charCodeAt(i)?(t="_",i++):(t=null,0===o&&a('"_"')),null===t&&(43===n.charCodeAt(i)?(t="+",i++):(t=null,0===o&&a('"+"')),null===t&&(96===n.charCodeAt(i)?(t="`",i++):(t=null,0===o&&a('"`"')),null===t&&(39===n.charCodeAt(i)?(t="'",i++):(t=null,0===o&&a('"\'"')),null===t&&(126===n.charCodeAt(i)?(t="~",i++):(t=null,0===o&&a('"~"')),null===t&&(40===n.charCodeAt(i)?(t="(",i++):(t=null,0===o&&a('"("')),null===t&&(41===n.charCodeAt(i)?(t=")",i++):(t=null,0===o&&a('")"')),null===t&&(60===n.charCodeAt(i)?(t="<",i++):(t=null,0===o&&a('"<"')),null===t&&(62===n.charCodeAt(i)?(t=">",i++):(t=null,0===o&&a('">"')),null===t&&(58===n.charCodeAt(i)?(t=":",i++):(t=null,0===o&&a('":"')),null===t&&(92===n.charCodeAt(i)?(t="\\",i++):(t=null,0===o&&a('"\\\\"')),null===t&&null===(t=m())&&(47===n.charCodeAt(i)?(t="/",i++):(t=null,0===o&&a('"/"')),null===t&&(91===n.charCodeAt(i)?(t="[",i++):(t=null,0===o&&a('"["')),null===t&&(93===n.charCodeAt(i)?(t="]",i++):(t=null,0===o&&a('"]"')),null===t&&(63===n.charCodeAt(i)?(t="?",i++):(t=null,0===o&&a('"?"')),null===t&&(123===n.charCodeAt(i)?(t="{",i++):(t=null,0===o&&a('"{"')),null===t&&(125===n.charCodeAt(i)?(t="}",i++):(t=null,0===o&&a('"}"'))))))))))))))))))))))));else e=null;return null!==e&&(s=r,e=n.substring(i,s)),null===e&&(i=r),e}function D(){var e,t,r,s,l;return s=i,l=i,null!==(e=A())?(42===n.charCodeAt(i)?(t="*",i++):(t=null,0===o&&a('"*"')),null!==t&&null!==(r=A())?e=[e,t,r]:(e=null,i=l)):(e=null,i=l),null!==e&&(e="*"),null===e&&(i=s),e}function P(){var e,t,r,s,l;return s=i,l=i,null!==(e=A())?(47===n.charCodeAt(i)?(t="/",i++):(t=null,0===o&&a('"/"')),null!==t&&null!==(r=A())?e=[e,t,r]:(e=null,i=l)):(e=null,i=l),null!==e&&(e="/"),null===e&&(i=s),e}function M(){var e,t,r,s,l;return s=i,l=i,null!==(e=A())?(61===n.charCodeAt(i)?(t="=",i++):(t=null,0===o&&a('"="')),null!==t&&null!==(r=A())?e=[e,t,r]:(e=null,i=l)):(e=null,i=l),null!==e&&(e="="),null===e&&(i=s),e}function q(){var e,t,r,s,l;return s=i,l=i,null!==(e=A())?(40===n.charCodeAt(i)?(t="(",i++):(t=null,0===o&&a('"("')),null!==t&&null!==(r=A())?e=[e,t,r]:(e=null,i=l)):(e=null,i=l),null!==e&&(e="("),null===e&&(i=s),e}function L(){var e,t,r,s,l;return s=i,l=i,null!==(e=A())?(41===n.charCodeAt(i)?(t=")",i++):(t=null,0===o&&a('")"')),null!==t&&null!==(r=A())?e=[e,t,r]:(e=null,i=l)):(e=null,i=l),null!==e&&(e=")"),null===e&&(i=s),e}function H(){var e,t,r,s;return r=i,s=i,62===n.charCodeAt(i)?(e=">",i++):(e=null,0===o&&a('">"')),null!==e&&null!==(t=A())?e=[e,t]:(e=null,i=s),null!==e&&(e=">"),null===e&&(i=r),e}function F(){var e,t,r,s;return r=i,s=i,null!==(e=A())?(60===n.charCodeAt(i)?(t="<",i++):(t=null,0===o&&a('"<"')),null!==t?e=[e,t]:(e=null,i=s)):(e=null,i=s),null!==e&&(e="<"),null===e&&(i=r),e}function j(){var e,t,r,s,l;return s=i,l=i,null!==(e=A())?(44===n.charCodeAt(i)?(t=",",i++):(t=null,0===o&&a('","')),null!==t&&null!==(r=A())?e=[e,t,r]:(e=null,i=l)):(e=null,i=l),null!==e&&(e=","),null===e&&(i=s),e}function G(){var e,t,r,s,l;return s=i,l=i,null!==(e=A())?(59===n.charCodeAt(i)?(t=";",i++):(t=null,0===o&&a('";"')),null!==t&&null!==(r=A())?e=[e,t,r]:(e=null,i=l)):(e=null,i=l),null!==e&&(e=";"),null===e&&(i=s),e}function W(){var e,t,r,s,l;return s=i,l=i,null!==(e=A())?(58===n.charCodeAt(i)?(t=":",i++):(t=null,0===o&&a('":"')),null!==t&&null!==(r=A())?e=[e,t,r]:(e=null,i=l)):(e=null,i=l),null!==e&&(e=":"),null===e&&(i=s),e}function V(){var e,t,n,r;return n=i,r=i,null!==(e=A())&&null!==(t=m())?e=[e,t]:(e=null,i=r),null!==e&&(e='"'),null===e&&(i=n),e}function B(){var e,t,n,r;return n=i,r=i,null!==(e=m())&&null!==(t=A())?e=[e,t]:(e=null,i=r),null!==e&&(e='"'),null===e&&(i=n),e}function K(){var e;return/^[!-']/.test(n.charAt(i))?(e=n.charAt(i),i++):(e=null,0===o&&a("[!-']")),null===e&&(/^[*-[]/.test(n.charAt(i))?(e=n.charAt(i),i++):(e=null,0===o&&a("[*-[]")),null===e&&(/^[\]-~]/.test(n.charAt(i))?(e=n.charAt(i),i++):(e=null,0===o&&a("[\\]-~]")),null===e&&null===(e=O())&&(e=E()))),e}function z(){var e,t,r,s,o,l,u;if(o=i,l=i,null!==(e=A()))if(null!==(t=m())){for(r=[],null===(s=$())&&(s=X());null!==s;)r.push(s),null===(s=$())&&(s=X());null!==r&&null!==(s=m())?e=[e,t,r,s]:(e=null,i=l)}else e=null,i=l;else e=null,i=l;return null!==e&&(u=o,e=n.substring(i,u)),null===e&&(i=o),e}function Y(){var e,t,r,s,o,l,u,a;if(o=i,l=i,null!==(e=A()))if(null!==(t=m())){for(r=[],null===(s=$())&&(s=X());null!==s;)r.push(s),null===(s=$())&&(s=X());null!==r&&null!==(s=m())?e=[e,t,r,s]:(e=null,i=l)}else e=null,i=l;else e=null,i=l;return null!==e&&(u=o,e=(a=n.substring(i,u).trim()).substring(1,a.length-1).replace(/\\([\x00-\x09\x0b-\x0c\x0e-\x7f])/g,"$1")),null===e&&(i=o),e}function $(){var e;return null===(e=E())&&(33===n.charCodeAt(i)?(e="!",i++):(e=null,0===o&&a('"!"')),null===e&&(/^[#-[]/.test(n.charAt(i))?(e=n.charAt(i),i++):(e=null,0===o&&a("[#-[]")),null===e&&(/^[\]-~]/.test(n.charAt(i))?(e=n.charAt(i),i++):(e=null,0===o&&a("[\\]-~]")),null===e&&(e=O())))),e}function X(){var e,t,r;return r=i,92===n.charCodeAt(i)?(e="\\",i++):(e=null,0===o&&a('"\\\\"')),null!==e?(/^[\0-\t]/.test(n.charAt(i))?(t=n.charAt(i),i++):(t=null,0===o&&a("[\\0-\\t]")),null===t&&(/^[\x0B-\f]/.test(n.charAt(i))?(t=n.charAt(i),i++):(t=null,0===o&&a("[\\x0B-\\f]")),null===t&&(/^[\x0E-]/.test(n.charAt(i))?(t=n.charAt(i),i++):(t=null,0===o&&a("[\\x0E-]")))),null!==t?e=[e,t]:(e=null,i=r)):(e=null,i=r),e}function J(){var e,t,r,s,l,u;return l=i,u=i,null!==(e=Z())?(58===n.charCodeAt(i)?(t=":",i++):(t=null,0===o&&a('":"')),null!==t&&null!==(r=null!==(r=ne())?r:"")&&null!==(s=oe())?e=[e,t,r,s]:(e=null,i=u)):(e=null,i=u),null!==e&&(e=function(e){try{jn.uri=new Hn(jn.scheme,jn.user,jn.host,jn.port),delete jn.scheme,delete jn.user,delete jn.host,delete jn.host_type,delete jn.port}catch(e){jn=-1}}()),null===e&&(i=l),e}function Q(){var e,t,s,l,u,c,h,d;return h=i,d=i,null!==(e=Z())?(58===n.charCodeAt(i)?(t=":",i++):(t=null,0===o&&a('":"')),null!==t&&null!==(s=null!==(s=ne())?s:"")&&null!==(l=oe())&&null!==(u=ge())&&null!==(c=null!==(c=Ne())?c:"")?e=[e,t,s,l,u,c]:(e=null,i=d)):(e=null,i=d),null!==e&&(e=function(e){try{jn.uri=new Hn(jn.scheme,jn.user,jn.host,jn.port,jn.uri_params,jn.uri_headers),delete jn.scheme,delete jn.user,delete jn.host,delete jn.host_type,delete jn.port,delete jn.uri_params,"SIP_URI"===r&&(jn=jn.uri)}catch(e){jn=-1}}()),null===e&&(i=h),e}function Z(){var e;return null===(e=ee())&&(e=te()),e}function ee(){var e,t,r;return t=i,"sips"===n.substr(i,4).toLowerCase()?(e=n.substr(i,4),i+=4):(e=null,0===o&&a('"sips"')),null!==e&&(r=e,e=void(jn.scheme=r.toLowerCase())),null===e&&(i=t),e}function te(){var e,t,r;return t=i,"sip"===n.substr(i,3).toLowerCase()?(e=n.substr(i,3),i+=3):(e=null,0===o&&a('"sip"')),null!==e&&(r=e,e=void(jn.scheme=r.toLowerCase())),null===e&&(i=t),e}function ne(){var e,t,r,s,l,u,c;return s=i,l=i,null!==(e=re())?(u=i,58===n.charCodeAt(i)?(t=":",i++):(t=null,0===o&&a('":"')),null!==t&&null!==(r=ie())?t=[t,r]:(t=null,i=u),null!==(t=null!==t?t:"")?(64===n.charCodeAt(i)?(r="@",i++):(r=null,0===o&&a('"@"')),null!==r?e=[e,t,r]:(e=null,i=l)):(e=null,i=l)):(e=null,i=l),null!==e&&(c=s,e=void(jn.user=decodeURIComponent(n.substring(i-1,c)))),null===e&&(i=s),e}function re(){var e,t;if(null===(t=C())&&null===(t=S())&&(t=se()),null!==t)for(e=[];null!==t;)e.push(t),null===(t=C())&&null===(t=S())&&(t=se());else e=null;return e}function se(){var e;return 38===n.charCodeAt(i)?(e="&",i++):(e=null,0===o&&a('"&"')),null===e&&(61===n.charCodeAt(i)?(e="=",i++):(e=null,0===o&&a('"="')),null===e&&(43===n.charCodeAt(i)?(e="+",i++):(e=null,0===o&&a('"+"')),null===e&&(36===n.charCodeAt(i)?(e="$",i++):(e=null,0===o&&a('"$"')),null===e&&(44===n.charCodeAt(i)?(e=",",i++):(e=null,0===o&&a('","')),null===e&&(59===n.charCodeAt(i)?(e=";",i++):(e=null,0===o&&a('";"')),null===e&&(63===n.charCodeAt(i)?(e="?",i++):(e=null,0===o&&a('"?"')),null===e&&(47===n.charCodeAt(i)?(e="/",i++):(e=null,0===o&&a('"/"'))))))))),e}function ie(){var e,t,r,s;for(r=i,e=[],null===(t=C())&&null===(t=S())&&(38===n.charCodeAt(i)?(t="&",i++):(t=null,0===o&&a('"&"')),null===t&&(61===n.charCodeAt(i)?(t="=",i++):(t=null,0===o&&a('"="')),null===t&&(43===n.charCodeAt(i)?(t="+",i++):(t=null,0===o&&a('"+"')),null===t&&(36===n.charCodeAt(i)?(t="$",i++):(t=null,0===o&&a('"$"')),null===t&&(44===n.charCodeAt(i)?(t=",",i++):(t=null,0===o&&a('","')))))));null!==t;)e.push(t),null===(t=C())&&null===(t=S())&&(38===n.charCodeAt(i)?(t="&",i++):(t=null,0===o&&a('"&"')),null===t&&(61===n.charCodeAt(i)?(t="=",i++):(t=null,0===o&&a('"="')),null===t&&(43===n.charCodeAt(i)?(t="+",i++):(t=null,0===o&&a('"+"')),null===t&&(36===n.charCodeAt(i)?(t="$",i++):(t=null,0===o&&a('"$"')),null===t&&(44===n.charCodeAt(i)?(t=",",i++):(t=null,0===o&&a('","')))))));return null!==e&&(s=r,e=void(jn.password=n.substring(i,s))),null===e&&(i=r),e}function oe(){var e,t,r,s,l;return s=i,null!==(e=le())?(l=i,58===n.charCodeAt(i)?(t=":",i++):(t=null,0===o&&a('":"')),null!==t&&null!==(r=ve())?t=[t,r]:(t=null,i=l),null!==(t=null!==t?t:"")?e=[e,t]:(e=null,i=s)):(e=null,i=s),e}function le(){var e,t,r;return t=i,null===(e=ue())&&null===(e=pe())&&(e=he()),null!==e&&(r=t,jn.host=n.substring(i,r).toLowerCase(),e=jn.host),null===e&&(i=t),e}function ue(){var e,t,r,s,l,u,c;for(s=i,l=i,e=[],u=i,null!==(t=ae())?(46===n.charCodeAt(i)?(r=".",i++):(r=null,0===o&&a('"."')),null!==r?t=[t,r]:(t=null,i=u)):(t=null,i=u);null!==t;)e.push(t),u=i,null!==(t=ae())?(46===n.charCodeAt(i)?(r=".",i++):(r=null,0===o&&a('"."')),null!==r?t=[t,r]:(t=null,i=u)):(t=null,i=u);return null!==e&&null!==(t=ce())?(46===n.charCodeAt(i)?(r=".",i++):(r=null,0===o&&a('"."')),null!==(r=null!==r?r:"")?e=[e,t,r]:(e=null,i=l)):(e=null,i=l),null!==e&&(c=s,jn.host_type="domain",e=n.substring(i,c)),null===e&&(i=s),e}function ae(){var e,t,r,s;if(s=i,null!==(e=y())){for(t=[],null===(r=y())&&(45===n.charCodeAt(i)?(r="-",i++):(r=null,0===o&&a('"-"')),null===r&&(95===n.charCodeAt(i)?(r="_",i++):(r=null,0===o&&a('"_"'))));null!==r;)t.push(r),null===(r=y())&&(45===n.charCodeAt(i)?(r="-",i++):(r=null,0===o&&a('"-"')),null===r&&(95===n.charCodeAt(i)?(r="_",i++):(r=null,0===o&&a('"_"'))));null!==t?e=[e,t]:(e=null,i=s)}else e=null,i=s;return e}function ce(){var e,t,r,s;if(s=i,null!==(e=d())){for(t=[],null===(r=y())&&(45===n.charCodeAt(i)?(r="-",i++):(r=null,0===o&&a('"-"')),null===r&&(95===n.charCodeAt(i)?(r="_",i++):(r=null,0===o&&a('"_"'))));null!==r;)t.push(r),null===(r=y())&&(45===n.charCodeAt(i)?(r="-",i++):(r=null,0===o&&a('"-"')),null===r&&(95===n.charCodeAt(i)?(r="_",i++):(r=null,0===o&&a('"_"'))));null!==t?e=[e,t]:(e=null,i=s)}else e=null,i=s;return e}function he(){var e,t,r,s,l,u;return s=i,l=i,91===n.charCodeAt(i)?(e="[",i++):(e=null,0===o&&a('"["')),null!==e&&null!==(t=de())?(93===n.charCodeAt(i)?(r="]",i++):(r=null,0===o&&a('"]"')),null!==r?e=[e,t,r]:(e=null,i=l)):(e=null,i=l),null!==e&&(u=s,jn.host_type="IPv6",e=n.substring(i,u)),null===e&&(i=s),e}function de(){var e,t,r,s,l,u,c,h,d,f,_,p,m,v,g,y,T;return v=i,g=i,null!==(e=fe())?(58===n.charCodeAt(i)?(t=":",i++):(t=null,0===o&&a('":"')),null!==t&&null!==(r=fe())?(58===n.charCodeAt(i)?(s=":",i++):(s=null,0===o&&a('":"')),null!==s&&null!==(l=fe())?(58===n.charCodeAt(i)?(u=":",i++):(u=null,0===o&&a('":"')),null!==u&&null!==(c=fe())?(58===n.charCodeAt(i)?(h=":",i++):(h=null,0===o&&a('":"')),null!==h&&null!==(d=fe())?(58===n.charCodeAt(i)?(f=":",i++):(f=null,0===o&&a('":"')),null!==f&&null!==(_=fe())?(58===n.charCodeAt(i)?(p=":",i++):(p=null,0===o&&a('":"')),null!==p&&null!==(m=_e())?e=[e,t,r,s,l,u,c,h,d,f,_,p,m]:(e=null,i=g)):(e=null,i=g)):(e=null,i=g)):(e=null,i=g)):(e=null,i=g)):(e=null,i=g)):(e=null,i=g),null===e&&(g=i,"::"===n.substr(i,2)?(e="::",i+=2):(e=null,0===o&&a('"::"')),null!==e&&null!==(t=fe())?(58===n.charCodeAt(i)?(r=":",i++):(r=null,0===o&&a('":"')),null!==r&&null!==(s=fe())?(58===n.charCodeAt(i)?(l=":",i++):(l=null,0===o&&a('":"')),null!==l&&null!==(u=fe())?(58===n.charCodeAt(i)?(c=":",i++):(c=null,0===o&&a('":"')),null!==c&&null!==(h=fe())?(58===n.charCodeAt(i)?(d=":",i++):(d=null,0===o&&a('":"')),null!==d&&null!==(f=fe())?(58===n.charCodeAt(i)?(_=":",i++):(_=null,0===o&&a('":"')),null!==_&&null!==(p=_e())?e=[e,t,r,s,l,u,c,h,d,f,_,p]:(e=null,i=g)):(e=null,i=g)):(e=null,i=g)):(e=null,i=g)):(e=null,i=g)):(e=null,i=g),null===e&&(g=i,"::"===n.substr(i,2)?(e="::",i+=2):(e=null,0===o&&a('"::"')),null!==e&&null!==(t=fe())?(58===n.charCodeAt(i)?(r=":",i++):(r=null,0===o&&a('":"')),null!==r&&null!==(s=fe())?(58===n.charCodeAt(i)?(l=":",i++):(l=null,0===o&&a('":"')),null!==l&&null!==(u=fe())?(58===n.charCodeAt(i)?(c=":",i++):(c=null,0===o&&a('":"')),null!==c&&null!==(h=fe())?(58===n.charCodeAt(i)?(d=":",i++):(d=null,0===o&&a('":"')),null!==d&&null!==(f=_e())?e=[e,t,r,s,l,u,c,h,d,f]:(e=null,i=g)):(e=null,i=g)):(e=null,i=g)):(e=null,i=g)):(e=null,i=g),null===e&&(g=i,"::"===n.substr(i,2)?(e="::",i+=2):(e=null,0===o&&a('"::"')),null!==e&&null!==(t=fe())?(58===n.charCodeAt(i)?(r=":",i++):(r=null,0===o&&a('":"')),null!==r&&null!==(s=fe())?(58===n.charCodeAt(i)?(l=":",i++):(l=null,0===o&&a('":"')),null!==l&&null!==(u=fe())?(58===n.charCodeAt(i)?(c=":",i++):(c=null,0===o&&a('":"')),null!==c&&null!==(h=_e())?e=[e,t,r,s,l,u,c,h]:(e=null,i=g)):(e=null,i=g)):(e=null,i=g)):(e=null,i=g),null===e&&(g=i,"::"===n.substr(i,2)?(e="::",i+=2):(e=null,0===o&&a('"::"')),null!==e&&null!==(t=fe())?(58===n.charCodeAt(i)?(r=":",i++):(r=null,0===o&&a('":"')),null!==r&&null!==(s=fe())?(58===n.charCodeAt(i)?(l=":",i++):(l=null,0===o&&a('":"')),null!==l&&null!==(u=_e())?e=[e,t,r,s,l,u]:(e=null,i=g)):(e=null,i=g)):(e=null,i=g),null===e&&(g=i,"::"===n.substr(i,2)?(e="::",i+=2):(e=null,0===o&&a('"::"')),null!==e&&null!==(t=fe())?(58===n.charCodeAt(i)?(r=":",i++):(r=null,0===o&&a('":"')),null!==r&&null!==(s=_e())?e=[e,t,r,s]:(e=null,i=g)):(e=null,i=g),null===e&&(g=i,"::"===n.substr(i,2)?(e="::",i+=2):(e=null,0===o&&a('"::"')),null!==e&&null!==(t=_e())?e=[e,t]:(e=null,i=g),null===e&&(g=i,"::"===n.substr(i,2)?(e="::",i+=2):(e=null,0===o&&a('"::"')),null!==e&&null!==(t=fe())?e=[e,t]:(e=null,i=g),null===e&&(g=i,null!==(e=fe())?("::"===n.substr(i,2)?(t="::",i+=2):(t=null,0===o&&a('"::"')),null!==t&&null!==(r=fe())?(58===n.charCodeAt(i)?(s=":",i++):(s=null,0===o&&a('":"')),null!==s&&null!==(l=fe())?(58===n.charCodeAt(i)?(u=":",i++):(u=null,0===o&&a('":"')),null!==u&&null!==(c=fe())?(58===n.charCodeAt(i)?(h=":",i++):(h=null,0===o&&a('":"')),null!==h&&null!==(d=fe())?(58===n.charCodeAt(i)?(f=":",i++):(f=null,0===o&&a('":"')),null!==f&&null!==(_=_e())?e=[e,t,r,s,l,u,c,h,d,f,_]:(e=null,i=g)):(e=null,i=g)):(e=null,i=g)):(e=null,i=g)):(e=null,i=g)):(e=null,i=g),null===e&&(g=i,null!==(e=fe())?(y=i,58===n.charCodeAt(i)?(t=":",i++):(t=null,0===o&&a('":"')),null!==t&&null!==(r=fe())?t=[t,r]:(t=null,i=y),null!==(t=null!==t?t:"")?("::"===n.substr(i,2)?(r="::",i+=2):(r=null,0===o&&a('"::"')),null!==r&&null!==(s=fe())?(58===n.charCodeAt(i)?(l=":",i++):(l=null,0===o&&a('":"')),null!==l&&null!==(u=fe())?(58===n.charCodeAt(i)?(c=":",i++):(c=null,0===o&&a('":"')),null!==c&&null!==(h=fe())?(58===n.charCodeAt(i)?(d=":",i++):(d=null,0===o&&a('":"')),null!==d&&null!==(f=_e())?e=[e,t,r,s,l,u,c,h,d,f]:(e=null,i=g)):(e=null,i=g)):(e=null,i=g)):(e=null,i=g)):(e=null,i=g)):(e=null,i=g),null===e&&(g=i,null!==(e=fe())?(y=i,58===n.charCodeAt(i)?(t=":",i++):(t=null,0===o&&a('":"')),null!==t&&null!==(r=fe())?t=[t,r]:(t=null,i=y),null!==(t=null!==t?t:"")?(y=i,58===n.charCodeAt(i)?(r=":",i++):(r=null,0===o&&a('":"')),null!==r&&null!==(s=fe())?r=[r,s]:(r=null,i=y),null!==(r=null!==r?r:"")?("::"===n.substr(i,2)?(s="::",i+=2):(s=null,0===o&&a('"::"')),null!==s&&null!==(l=fe())?(58===n.charCodeAt(i)?(u=":",i++):(u=null,0===o&&a('":"')),null!==u&&null!==(c=fe())?(58===n.charCodeAt(i)?(h=":",i++):(h=null,0===o&&a('":"')),null!==h&&null!==(d=_e())?e=[e,t,r,s,l,u,c,h,d]:(e=null,i=g)):(e=null,i=g)):(e=null,i=g)):(e=null,i=g)):(e=null,i=g)):(e=null,i=g),null===e&&(g=i,null!==(e=fe())?(y=i,58===n.charCodeAt(i)?(t=":",i++):(t=null,0===o&&a('":"')),null!==t&&null!==(r=fe())?t=[t,r]:(t=null,i=y),null!==(t=null!==t?t:"")?(y=i,58===n.charCodeAt(i)?(r=":",i++):(r=null,0===o&&a('":"')),null!==r&&null!==(s=fe())?r=[r,s]:(r=null,i=y),null!==(r=null!==r?r:"")?(y=i,58===n.charCodeAt(i)?(s=":",i++):(s=null,0===o&&a('":"')),null!==s&&null!==(l=fe())?s=[s,l]:(s=null,i=y),null!==(s=null!==s?s:"")?("::"===n.substr(i,2)?(l="::",i+=2):(l=null,0===o&&a('"::"')),null!==l&&null!==(u=fe())?(58===n.charCodeAt(i)?(c=":",i++):(c=null,0===o&&a('":"')),null!==c&&null!==(h=_e())?e=[e,t,r,s,l,u,c,h]:(e=null,i=g)):(e=null,i=g)):(e=null,i=g)):(e=null,i=g)):(e=null,i=g)):(e=null,i=g),null===e&&(g=i,null!==(e=fe())?(y=i,58===n.charCodeAt(i)?(t=":",i++):(t=null,0===o&&a('":"')),null!==t&&null!==(r=fe())?t=[t,r]:(t=null,i=y),null!==(t=null!==t?t:"")?(y=i,58===n.charCodeAt(i)?(r=":",i++):(r=null,0===o&&a('":"')),null!==r&&null!==(s=fe())?r=[r,s]:(r=null,i=y),null!==(r=null!==r?r:"")?(y=i,58===n.charCodeAt(i)?(s=":",i++):(s=null,0===o&&a('":"')),null!==s&&null!==(l=fe())?s=[s,l]:(s=null,i=y),null!==(s=null!==s?s:"")?(y=i,58===n.charCodeAt(i)?(l=":",i++):(l=null,0===o&&a('":"')),null!==l&&null!==(u=fe())?l=[l,u]:(l=null,i=y),null!==(l=null!==l?l:"")?("::"===n.substr(i,2)?(u="::",i+=2):(u=null,0===o&&a('"::"')),null!==u&&null!==(c=_e())?e=[e,t,r,s,l,u,c]:(e=null,i=g)):(e=null,i=g)):(e=null,i=g)):(e=null,i=g)):(e=null,i=g)):(e=null,i=g),null===e&&(g=i,null!==(e=fe())?(y=i,58===n.charCodeAt(i)?(t=":",i++):(t=null,0===o&&a('":"')),null!==t&&null!==(r=fe())?t=[t,r]:(t=null,i=y),null!==(t=null!==t?t:"")?(y=i,58===n.charCodeAt(i)?(r=":",i++):(r=null,0===o&&a('":"')),null!==r&&null!==(s=fe())?r=[r,s]:(r=null,i=y),null!==(r=null!==r?r:"")?(y=i,58===n.charCodeAt(i)?(s=":",i++):(s=null,0===o&&a('":"')),null!==s&&null!==(l=fe())?s=[s,l]:(s=null,i=y),null!==(s=null!==s?s:"")?(y=i,58===n.charCodeAt(i)?(l=":",i++):(l=null,0===o&&a('":"')),null!==l&&null!==(u=fe())?l=[l,u]:(l=null,i=y),null!==(l=null!==l?l:"")?(y=i,58===n.charCodeAt(i)?(u=":",i++):(u=null,0===o&&a('":"')),null!==u&&null!==(c=fe())?u=[u,c]:(u=null,i=y),null!==(u=null!==u?u:"")?("::"===n.substr(i,2)?(c="::",i+=2):(c=null,0===o&&a('"::"')),null!==c&&null!==(h=fe())?e=[e,t,r,s,l,u,c,h]:(e=null,i=g)):(e=null,i=g)):(e=null,i=g)):(e=null,i=g)):(e=null,i=g)):(e=null,i=g)):(e=null,i=g),null===e&&(g=i,null!==(e=fe())?(y=i,58===n.charCodeAt(i)?(t=":",i++):(t=null,0===o&&a('":"')),null!==t&&null!==(r=fe())?t=[t,r]:(t=null,i=y),null!==(t=null!==t?t:"")?(y=i,58===n.charCodeAt(i)?(r=":",i++):(r=null,0===o&&a('":"')),null!==r&&null!==(s=fe())?r=[r,s]:(r=null,i=y),null!==(r=null!==r?r:"")?(y=i,58===n.charCodeAt(i)?(s=":",i++):(s=null,0===o&&a('":"')),null!==s&&null!==(l=fe())?s=[s,l]:(s=null,i=y),null!==(s=null!==s?s:"")?(y=i,58===n.charCodeAt(i)?(l=":",i++):(l=null,0===o&&a('":"')),null!==l&&null!==(u=fe())?l=[l,u]:(l=null,i=y),null!==(l=null!==l?l:"")?(y=i,58===n.charCodeAt(i)?(u=":",i++):(u=null,0===o&&a('":"')),null!==u&&null!==(c=fe())?u=[u,c]:(u=null,i=y),null!==(u=null!==u?u:"")?(y=i,58===n.charCodeAt(i)?(c=":",i++):(c=null,0===o&&a('":"')),null!==c&&null!==(h=fe())?c=[c,h]:(c=null,i=y),null!==(c=null!==c?c:"")?("::"===n.substr(i,2)?(h="::",i+=2):(h=null,0===o&&a('"::"')),null!==h?e=[e,t,r,s,l,u,c,h]:(e=null,i=g)):(e=null,i=g)):(e=null,i=g)):(e=null,i=g)):(e=null,i=g)):(e=null,i=g)):(e=null,i=g)):(e=null,i=g))))))))))))))),null!==e&&(T=v,jn.host_type="IPv6",e=n.substring(i,T)),null===e&&(i=v),e}function fe(){var e,t,n,r,s;return s=i,null!==(e=f())&&null!==(t=null!==(t=f())?t:"")&&null!==(n=null!==(n=f())?n:"")&&null!==(r=null!==(r=f())?r:"")?e=[e,t,n,r]:(e=null,i=s),e}function _e(){var e,t,r,s;return s=i,null!==(e=fe())?(58===n.charCodeAt(i)?(t=":",i++):(t=null,0===o&&a('":"')),null!==t&&null!==(r=fe())?e=[e,t,r]:(e=null,i=s)):(e=null,i=s),null===e&&(e=pe()),e}function pe(){var e,t,r,s,l,u,c,h,d,f;return h=i,d=i,null!==(e=me())?(46===n.charCodeAt(i)?(t=".",i++):(t=null,0===o&&a('"."')),null!==t&&null!==(r=me())?(46===n.charCodeAt(i)?(s=".",i++):(s=null,0===o&&a('"."')),null!==s&&null!==(l=me())?(46===n.charCodeAt(i)?(u=".",i++):(u=null,0===o&&a('"."')),null!==u&&null!==(c=me())?e=[e,t,r,s,l,u,c]:(e=null,i=d)):(e=null,i=d)):(e=null,i=d)):(e=null,i=d),null!==e&&(f=h,jn.host_type="IPv4",e=n.substring(i,f)),null===e&&(i=h),e}function me(){var e,t,r,s;return s=i,"25"===n.substr(i,2)?(e="25",i+=2):(e=null,0===o&&a('"25"')),null!==e?(/^[0-5]/.test(n.charAt(i))?(t=n.charAt(i),i++):(t=null,0===o&&a("[0-5]")),null!==t?e=[e,t]:(e=null,i=s)):(e=null,i=s),null===e&&(s=i,50===n.charCodeAt(i)?(e="2",i++):(e=null,0===o&&a('"2"')),null!==e?(/^[0-4]/.test(n.charAt(i))?(t=n.charAt(i),i++):(t=null,0===o&&a("[0-4]")),null!==t&&null!==(r=h())?e=[e,t,r]:(e=null,i=s)):(e=null,i=s),null===e&&(s=i,49===n.charCodeAt(i)?(e="1",i++):(e=null,0===o&&a('"1"')),null!==e&&null!==(t=h())&&null!==(r=h())?e=[e,t,r]:(e=null,i=s),null===e&&(s=i,/^[1-9]/.test(n.charAt(i))?(e=n.charAt(i),i++):(e=null,0===o&&a("[1-9]")),null!==e&&null!==(t=h())?e=[e,t]:(e=null,i=s),null===e&&(e=h())))),e}function ve(){var e,t,n,r,s,o,l,u;return o=i,l=i,null!==(e=null!==(e=h())?e:"")&&null!==(t=null!==(t=h())?t:"")&&null!==(n=null!==(n=h())?n:"")&&null!==(r=null!==(r=h())?r:"")&&null!==(s=null!==(s=h())?s:"")?e=[e,t,n,r,s]:(e=null,i=l),null!==e&&(u=e,u=parseInt(u.join("")),jn.port=u,e=u),null===e&&(i=o),e}function ge(){var e,t,r,s;for(e=[],s=i,59===n.charCodeAt(i)?(t=";",i++):(t=null,0===o&&a('";"')),null!==t&&null!==(r=ye())?t=[t,r]:(t=null,i=s);null!==t;)e.push(t),s=i,59===n.charCodeAt(i)?(t=";",i++):(t=null,0===o&&a('";"')),null!==t&&null!==(r=ye())?t=[t,r]:(t=null,i=s);return e}function ye(){var e;return null===(e=Te())&&null===(e=Ce())&&null===(e=be())&&null===(e=Se())&&null===(e=Ee())&&null===(e=Ae())&&(e=Re()),e}function Te(){var e,t,r,s,l;return r=i,s=i,"transport="===n.substr(i,10).toLowerCase()?(e=n.substr(i,10),i+=10):(e=null,0===o&&a('"transport="')),null!==e?("udp"===n.substr(i,3).toLowerCase()?(t=n.substr(i,3),i+=3):(t=null,0===o&&a('"udp"')),null===t&&("tcp"===n.substr(i,3).toLowerCase()?(t=n.substr(i,3),i+=3):(t=null,0===o&&a('"tcp"')),null===t&&("sctp"===n.substr(i,4).toLowerCase()?(t=n.substr(i,4),i+=4):(t=null,0===o&&a('"sctp"')),null===t&&("tls"===n.substr(i,3).toLowerCase()?(t=n.substr(i,3),i+=3):(t=null,0===o&&a('"tls"')),null===t&&(t=N())))),null!==t?e=[e,t]:(e=null,i=s)):(e=null,i=s),null!==e&&(l=e[1],jn.uri_params||(jn.uri_params={}),e=void(jn.uri_params.transport=l.toLowerCase())),null===e&&(i=r),e}function Ce(){var e,t,r,s,l;return r=i,s=i,"user="===n.substr(i,5).toLowerCase()?(e=n.substr(i,5),i+=5):(e=null,0===o&&a('"user="')),null!==e?("phone"===n.substr(i,5).toLowerCase()?(t=n.substr(i,5),i+=5):(t=null,0===o&&a('"phone"')),null===t&&("ip"===n.substr(i,2).toLowerCase()?(t=n.substr(i,2),i+=2):(t=null,0===o&&a('"ip"')),null===t&&(t=N())),null!==t?e=[e,t]:(e=null,i=s)):(e=null,i=s),null!==e&&(l=e[1],jn.uri_params||(jn.uri_params={}),e=void(jn.uri_params.user=l.toLowerCase())),null===e&&(i=r),e}function be(){var e,t,r,s,l;return r=i,s=i,"method="===n.substr(i,7).toLowerCase()?(e=n.substr(i,7),i+=7):(e=null,0===o&&a('"method="')),null!==e&&null!==(t=ct())?e=[e,t]:(e=null,i=s),null!==e&&(l=e[1],jn.uri_params||(jn.uri_params={}),e=void(jn.uri_params.method=l)),null===e&&(i=r),e}function Se(){var e,t,r,s,l;return r=i,s=i,"ttl="===n.substr(i,4).toLowerCase()?(e=n.substr(i,4),i+=4):(e=null,0===o&&a('"ttl="')),null!==e&&null!==(t=An())?e=[e,t]:(e=null,i=s),null!==e&&(l=e[1],jn.params||(jn.params={}),e=void(jn.params.ttl=l)),null===e&&(i=r),e}function Ee(){var e,t,r,s,l;return r=i,s=i,"maddr="===n.substr(i,6).toLowerCase()?(e=n.substr(i,6),i+=6):(e=null,0===o&&a('"maddr="')),null!==e&&null!==(t=le())?e=[e,t]:(e=null,i=s),null!==e&&(l=e[1],jn.uri_params||(jn.uri_params={}),e=void(jn.uri_params.maddr=l)),null===e&&(i=r),e}function Ae(){var e,t,r,s,l,u;return s=i,l=i,"lr"===n.substr(i,2).toLowerCase()?(e=n.substr(i,2),i+=2):(e=null,0===o&&a('"lr"')),null!==e?(u=i,61===n.charCodeAt(i)?(t="=",i++):(t=null,0===o&&a('"="')),null!==t&&null!==(r=N())?t=[t,r]:(t=null,i=u),null!==(t=null!==t?t:"")?e=[e,t]:(e=null,i=l)):(e=null,i=l),null!==e&&(jn.uri_params||(jn.uri_params={}),e=void(jn.uri_params.lr=void 0)),null===e&&(i=s),e}function Re(){var e,t,r,s,l,u,c,h;return s=i,l=i,null!==(e=we())?(u=i,61===n.charCodeAt(i)?(t="=",i++):(t=null,0===o&&a('"="')),null!==t&&null!==(r=Ie())?t=[t,r]:(t=null,i=u),null!==(t=null!==t?t:"")?e=[e,t]:(e=null,i=l)):(e=null,i=l),null!==e&&(c=e[0],h=e[1],jn.uri_params||(jn.uri_params={}),h=void 0===h?void 0:h[1],e=void(jn.uri_params[c.toLowerCase()]=h)),null===e&&(i=s),e}function we(){var e,t,n;if(n=i,null!==(t=Oe()))for(e=[];null!==t;)e.push(t),t=Oe();else e=null;return null!==e&&(e=e.join("")),null===e&&(i=n),e}function Ie(){var e,t,n;if(n=i,null!==(t=Oe()))for(e=[];null!==t;)e.push(t),t=Oe();else e=null;return null!==e&&(e=e.join("")),null===e&&(i=n),e}function Oe(){var e;return null===(e=ke())&&null===(e=C())&&(e=S()),e}function ke(){var e;return 91===n.charCodeAt(i)?(e="[",i++):(e=null,0===o&&a('"["')),null===e&&(93===n.charCodeAt(i)?(e="]",i++):(e=null,0===o&&a('"]"')),null===e&&(47===n.charCodeAt(i)?(e="/",i++):(e=null,0===o&&a('"/"')),null===e&&(58===n.charCodeAt(i)?(e=":",i++):(e=null,0===o&&a('":"')),null===e&&(38===n.charCodeAt(i)?(e="&",i++):(e=null,0===o&&a('"&"')),null===e&&(43===n.charCodeAt(i)?(e="+",i++):(e=null,0===o&&a('"+"')),null===e&&(36===n.charCodeAt(i)?(e="$",i++):(e=null,0===o&&a('"$"')))))))),e}function Ne(){var e,t,r,s,l,u,c;if(u=i,63===n.charCodeAt(i)?(e="?",i++):(e=null,0===o&&a('"?"')),null!==e)if(null!==(t=Ue())){for(r=[],c=i,38===n.charCodeAt(i)?(s="&",i++):(s=null,0===o&&a('"&"')),null!==s&&null!==(l=Ue())?s=[s,l]:(s=null,i=c);null!==s;)r.push(s),c=i,38===n.charCodeAt(i)?(s="&",i++):(s=null,0===o&&a('"&"')),null!==s&&null!==(l=Ue())?s=[s,l]:(s=null,i=c);null!==r?e=[e,t,r]:(e=null,i=u)}else e=null,i=u;else e=null,i=u;return e}function Ue(){var e,t,r,s,l,u,c;return s=i,l=i,null!==(e=xe())?(61===n.charCodeAt(i)?(t="=",i++):(t=null,0===o&&a('"="')),null!==t&&null!==(r=De())?e=[e,t,r]:(e=null,i=l)):(e=null,i=l),null!==e&&(u=e[0],c=e[2],u=u.join("").toLowerCase(),c=c.join(""),jn.uri_headers||(jn.uri_headers={}),e=void(jn.uri_headers[u]?jn.uri_headers[u].push(c):jn.uri_headers[u]=[c])),null===e&&(i=s),e}function xe(){var e,t;if(null===(t=Pe())&&null===(t=C())&&(t=S()),null!==t)for(e=[];null!==t;)e.push(t),null===(t=Pe())&&null===(t=C())&&(t=S());else e=null;return e}function De(){var e,t;for(e=[],null===(t=Pe())&&null===(t=C())&&(t=S());null!==t;)e.push(t),null===(t=Pe())&&null===(t=C())&&(t=S());return e}function Pe(){var e;return 91===n.charCodeAt(i)?(e="[",i++):(e=null,0===o&&a('"["')),null===e&&(93===n.charCodeAt(i)?(e="]",i++):(e=null,0===o&&a('"]"')),null===e&&(47===n.charCodeAt(i)?(e="/",i++):(e=null,0===o&&a('"/"')),null===e&&(63===n.charCodeAt(i)?(e="?",i++):(e=null,0===o&&a('"?"')),null===e&&(58===n.charCodeAt(i)?(e=":",i++):(e=null,0===o&&a('":"')),null===e&&(43===n.charCodeAt(i)?(e="+",i++):(e=null,0===o&&a('"+"')),null===e&&(36===n.charCodeAt(i)?(e="$",i++):(e=null,0===o&&a('"$"')))))))),e}function Me(){var e,t,n,r,s,o;return o=i,null!==(e=ct())&&null!==(t=v())&&null!==(n=qe())&&null!==(r=v())&&null!==(s=et())?e=[e,t,n,r,s]:(e=null,i=o),e}function qe(){var e;return null===(e=Q())&&(e=Le()),e}function Le(){var e,t,r,s;return s=i,null!==(e=$e())?(58===n.charCodeAt(i)?(t=":",i++):(t=null,0===o&&a('":"')),null!==t?(null===(r=He())&&(r=Ge()),null!==r?e=[e,t,r]:(e=null,i=s)):(e=null,i=s)):(e=null,i=s),e}function He(){var e,t,r,s,l;return s=i,null===(e=Fe())&&(e=je()),null!==e?(l=i,63===n.charCodeAt(i)?(t="?",i++):(t=null,0===o&&a('"?"')),null!==t&&null!==(r=Ze())?t=[t,r]:(t=null,i=l),null!==(t=null!==t?t:"")?e=[e,t]:(e=null,i=s)):(e=null,i=s),e}function Fe(){var e,t,r,s;return s=i,"//"===n.substr(i,2)?(e="//",i+=2):(e=null,0===o&&a('"//"')),null!==e&&null!==(t=Xe())&&null!==(r=null!==(r=je())?r:"")?e=[e,t,r]:(e=null,i=s),e}function je(){var e,t,r;return r=i,47===n.charCodeAt(i)?(e="/",i++):(e=null,0===o&&a('"/"')),null!==e&&null!==(t=Be())?e=[e,t]:(e=null,i=r),e}function Ge(){var e,t,n,r;if(r=i,null!==(e=Ve())){for(t=[],n=We();null!==n;)t.push(n),n=We();null!==t?e=[e,t]:(e=null,i=r)}else e=null,i=r;return e}function We(){var e;return null===(e=T())&&null===(e=C())&&(e=S()),e}function Ve(){var e;return null===(e=C())&&null===(e=S())&&(59===n.charCodeAt(i)?(e=";",i++):(e=null,0===o&&a('";"')),null===e&&(63===n.charCodeAt(i)?(e="?",i++):(e=null,0===o&&a('"?"')),null===e&&(58===n.charCodeAt(i)?(e=":",i++):(e=null,0===o&&a('":"')),null===e&&(64===n.charCodeAt(i)?(e="@",i++):(e=null,0===o&&a('"@"')),null===e&&(38===n.charCodeAt(i)?(e="&",i++):(e=null,0===o&&a('"&"')),null===e&&(61===n.charCodeAt(i)?(e="=",i++):(e=null,0===o&&a('"="')),null===e&&(43===n.charCodeAt(i)?(e="+",i++):(e=null,0===o&&a('"+"')),null===e&&(36===n.charCodeAt(i)?(e="$",i++):(e=null,0===o&&a('"$"')),null===e&&(44===n.charCodeAt(i)?(e=",",i++):(e=null,0===o&&a('","'))))))))))),e}function Be(){var e,t,r,s,l,u;if(l=i,null!==(e=Ke())){for(t=[],u=i,47===n.charCodeAt(i)?(r="/",i++):(r=null,0===o&&a('"/"')),null!==r&&null!==(s=Ke())?r=[r,s]:(r=null,i=u);null!==r;)t.push(r),u=i,47===n.charCodeAt(i)?(r="/",i++):(r=null,0===o&&a('"/"')),null!==r&&null!==(s=Ke())?r=[r,s]:(r=null,i=u);null!==t?e=[e,t]:(e=null,i=l)}else e=null,i=l;return e}function Ke(){var e,t,r,s,l,u;for(l=i,e=[],t=Ye();null!==t;)e.push(t),t=Ye();if(null!==e){for(t=[],u=i,59===n.charCodeAt(i)?(r=";",i++):(r=null,0===o&&a('";"')),null!==r&&null!==(s=ze())?r=[r,s]:(r=null,i=u);null!==r;)t.push(r),u=i,59===n.charCodeAt(i)?(r=";",i++):(r=null,0===o&&a('";"')),null!==r&&null!==(s=ze())?r=[r,s]:(r=null,i=u);null!==t?e=[e,t]:(e=null,i=l)}else e=null,i=l;return e}function ze(){var e,t;for(e=[],t=Ye();null!==t;)e.push(t),t=Ye();return e}function Ye(){var e;return null===(e=C())&&null===(e=S())&&(58===n.charCodeAt(i)?(e=":",i++):(e=null,0===o&&a('":"')),null===e&&(64===n.charCodeAt(i)?(e="@",i++):(e=null,0===o&&a('"@"')),null===e&&(38===n.charCodeAt(i)?(e="&",i++):(e=null,0===o&&a('"&"')),null===e&&(61===n.charCodeAt(i)?(e="=",i++):(e=null,0===o&&a('"="')),null===e&&(43===n.charCodeAt(i)?(e="+",i++):(e=null,0===o&&a('"+"')),null===e&&(36===n.charCodeAt(i)?(e="$",i++):(e=null,0===o&&a('"$"')),null===e&&(44===n.charCodeAt(i)?(e=",",i++):(e=null,0===o&&a('","'))))))))),e}function $e(){var e,t,r,s,l,u;if(s=i,l=i,null!==(e=d())){for(t=[],null===(r=d())&&null===(r=h())&&(43===n.charCodeAt(i)?(r="+",i++):(r=null,0===o&&a('"+"')),null===r&&(45===n.charCodeAt(i)?(r="-",i++):(r=null,0===o&&a('"-"')),null===r&&(46===n.charCodeAt(i)?(r=".",i++):(r=null,0===o&&a('"."')))));null!==r;)t.push(r),null===(r=d())&&null===(r=h())&&(43===n.charCodeAt(i)?(r="+",i++):(r=null,0===o&&a('"+"')),null===r&&(45===n.charCodeAt(i)?(r="-",i++):(r=null,0===o&&a('"-"')),null===r&&(46===n.charCodeAt(i)?(r=".",i++):(r=null,0===o&&a('"."')))));null!==t?e=[e,t]:(e=null,i=l)}else e=null,i=l;return null!==e&&(u=s,e=void(jn.scheme=n.substring(i,u))),null===e&&(i=s),e}function Xe(){var e;return null===(e=Je())&&(e=Qe()),e}function Je(){var e,t,r,s;return r=i,s=i,null!==(e=ne())?(64===n.charCodeAt(i)?(t="@",i++):(t=null,0===o&&a('"@"')),null!==t?e=[e,t]:(e=null,i=s)):(e=null,i=s),null!==(e=null!==e?e:"")&&null!==(t=oe())?e=[e,t]:(e=null,i=r),e=null!==e?e:""}function Qe(){var e,t;if(null===(t=C())&&null===(t=S())&&(36===n.charCodeAt(i)?(t="$",i++):(t=null,0===o&&a('"$"')),null===t&&(44===n.charCodeAt(i)?(t=",",i++):(t=null,0===o&&a('","')),null===t&&(59===n.charCodeAt(i)?(t=";",i++):(t=null,0===o&&a('";"')),null===t&&(58===n.charCodeAt(i)?(t=":",i++):(t=null,0===o&&a('":"')),null===t&&(64===n.charCodeAt(i)?(t="@",i++):(t=null,0===o&&a('"@"')),null===t&&(38===n.charCodeAt(i)?(t="&",i++):(t=null,0===o&&a('"&"')),null===t&&(61===n.charCodeAt(i)?(t="=",i++):(t=null,0===o&&a('"="')),null===t&&(43===n.charCodeAt(i)?(t="+",i++):(t=null,0===o&&a('"+"')))))))))),null!==t)for(e=[];null!==t;)e.push(t),null===(t=C())&&null===(t=S())&&(36===n.charCodeAt(i)?(t="$",i++):(t=null,0===o&&a('"$"')),null===t&&(44===n.charCodeAt(i)?(t=",",i++):(t=null,0===o&&a('","')),null===t&&(59===n.charCodeAt(i)?(t=";",i++):(t=null,0===o&&a('";"')),null===t&&(58===n.charCodeAt(i)?(t=":",i++):(t=null,0===o&&a('":"')),null===t&&(64===n.charCodeAt(i)?(t="@",i++):(t=null,0===o&&a('"@"')),null===t&&(38===n.charCodeAt(i)?(t="&",i++):(t=null,0===o&&a('"&"')),null===t&&(61===n.charCodeAt(i)?(t="=",i++):(t=null,0===o&&a('"="')),null===t&&(43===n.charCodeAt(i)?(t="+",i++):(t=null,0===o&&a('"+"'))))))))));else e=null;return e}function Ze(){var e,t;for(e=[],t=We();null!==t;)e.push(t),t=We();return e}function et(){var e,t,r,s,l,u,c,d,f;if(c=i,d=i,"sip"===n.substr(i,3).toLowerCase()?(e=n.substr(i,3),i+=3):(e=null,0===o&&a('"SIP"')),null!==e)if(47===n.charCodeAt(i)?(t="/",i++):(t=null,0===o&&a('"/"')),null!==t){if(null!==(s=h()))for(r=[];null!==s;)r.push(s),s=h();else r=null;if(null!==r)if(46===n.charCodeAt(i)?(s=".",i++):(s=null,0===o&&a('"."')),null!==s){if(null!==(u=h()))for(l=[];null!==u;)l.push(u),u=h();else l=null;null!==l?e=[e,t,r,s,l]:(e=null,i=d)}else e=null,i=d;else e=null,i=d}else e=null,i=d;else e=null,i=d;return null!==e&&(f=c,e=void(jn.sip_version=n.substring(i,f))),null===e&&(i=c),e}function tt(){var e;return"INVITE"===n.substr(i,6)?(e="INVITE",i+=6):(e=null,0===o&&a('"INVITE"')),e}function nt(){var e;return"ACK"===n.substr(i,3)?(e="ACK",i+=3):(e=null,0===o&&a('"ACK"')),e}function rt(){var e;return"OPTIONS"===n.substr(i,7)?(e="OPTIONS",i+=7):(e=null,0===o&&a('"OPTIONS"')),e}function st(){var e;return"BYE"===n.substr(i,3)?(e="BYE",i+=3):(e=null,0===o&&a('"BYE"')),e}function it(){var e;return"CANCEL"===n.substr(i,6)?(e="CANCEL",i+=6):(e=null,0===o&&a('"CANCEL"')),e}function ot(){var e;return"REGISTER"===n.substr(i,8)?(e="REGISTER",i+=8):(e=null,0===o&&a('"REGISTER"')),e}function lt(){var e;return"SUBSCRIBE"===n.substr(i,9)?(e="SUBSCRIBE",i+=9):(e=null,0===o&&a('"SUBSCRIBE"')),e}function ut(){var e;return"NOTIFY"===n.substr(i,6)?(e="NOTIFY",i+=6):(e=null,0===o&&a('"NOTIFY"')),e}function at(){var e;return"REFER"===n.substr(i,5)?(e="REFER",i+=5):(e=null,0===o&&a('"REFER"')),e}function ct(){var e,t,r;return t=i,null===(e=tt())&&null===(e=nt())&&null===(e=rt())&&null===(e=st())&&null===(e=it())&&null===(e=ot())&&null===(e=lt())&&null===(e=ut())&&null===(e=at())&&(e=N()),null!==e&&(r=t,jn.method=n.substring(i,r),e=jn.method),null===e&&(i=t),e}function ht(){var e,t,n,r,s,o;return o=i,null!==(e=et())&&null!==(t=v())&&null!==(n=dt())&&null!==(r=v())&&null!==(s=_t())?e=[e,t,n,r,s]:(e=null,i=o),e}function dt(){var e,t,n;return t=i,null!==(e=ft())&&(n=e,e=void(jn.status_code=parseInt(n.join("")))),null===e&&(i=t),e}function ft(){var e,t,n,r;return r=i,null!==(e=h())&&null!==(t=h())&&null!==(n=h())?e=[e,t,n]:(e=null,i=r),e}function _t(){var e,t,r,s;for(r=i,e=[],null===(t=T())&&null===(t=C())&&null===(t=S())&&null===(t=O())&&null===(t=k())&&null===(t=v())&&(t=g());null!==t;)e.push(t),null===(t=T())&&null===(t=C())&&null===(t=S())&&null===(t=O())&&null===(t=k())&&null===(t=v())&&(t=g());return null!==e&&(s=r,e=void(jn.reason_phrase=n.substring(i,s))),null===e&&(i=r),e}function pt(){var e,t,n,r,s,o,l;if(s=i,o=i,null===(e=J())&&(e=mt()),null!==e){for(t=[],l=i,null!==(n=G())&&null!==(r=gt())?n=[n,r]:(n=null,i=l);null!==n;)t.push(n),l=i,null!==(n=G())&&null!==(r=gt())?n=[n,r]:(n=null,i=l);null!==t?e=[e,t]:(e=null,i=o)}else e=null,i=o;return null!==e&&(e=function(e){var t;jn.multi_header||(jn.multi_header=[]);try{t=new Fn(jn.uri,jn.display_name,jn.params),delete jn.uri,delete jn.display_name,delete jn.params}catch(e){t=null}jn.multi_header.push({possition:i,offset:e,parsed:t})}(s)),null===e&&(i=s),e}function mt(){var e,t,n,r,s;return s=i,null!==(e=null!==(e=vt())?e:"")&&null!==(t=F())&&null!==(n=Q())&&null!==(r=H())?e=[e,t,n,r]:(e=null,i=s),e}function vt(){var e,t,n,r,s,o,l,u;if(s=i,o=i,null!==(e=N())){for(t=[],l=i,null!==(n=E())&&null!==(r=N())?n=[n,r]:(n=null,i=l);null!==n;)t.push(n),l=i,null!==(n=E())&&null!==(r=N())?n=[n,r]:(n=null,i=l);null!==t?e=[e,t]:(e=null,i=o)}else e=null,i=o;return null===e&&(e=Y()),null!==e&&(u=e,e=void(jn.display_name="string"==typeof u?u:u[1].reduce(function(e,t){return e+t[0]+t[1]},u[0]))),null===e&&(i=s),e}function gt(){var e;return null===(e=yt())&&null===(e=Tt())&&(e=St()),e}function yt(){var e,t,r,s,l,u;return s=i,l=i,"q"===n.substr(i,1).toLowerCase()?(e=n.substr(i,1),i++):(e=null,0===o&&a('"q"')),null!==e&&null!==(t=M())&&null!==(r=bt())?e=[e,t,r]:(e=null,i=l),null!==e&&(u=e[2],jn.params||(jn.params={}),e=void(jn.params.q=u)),null===e&&(i=s),e}function Tt(){var e,t,r,s,l,u;return s=i,l=i,"expires"===n.substr(i,7).toLowerCase()?(e=n.substr(i,7),i+=7):(e=null,0===o&&a('"expires"')),null!==e&&null!==(t=M())&&null!==(r=Ct())?e=[e,t,r]:(e=null,i=l),null!==e&&(u=e[2],jn.params||(jn.params={}),e=void(jn.params.expires=u)),null===e&&(i=s),e}function Ct(){var e,t,n;if(n=i,null!==(t=h()))for(e=[];null!==t;)e.push(t),t=h();else e=null;return null!==e&&(e=parseInt(e.join(""))),null===e&&(i=n),e}function bt(){var e,t,r,s,l,u,c,d,f;return u=i,c=i,48===n.charCodeAt(i)?(e="0",i++):(e=null,0===o&&a('"0"')),null!==e?(d=i,46===n.charCodeAt(i)?(t=".",i++):(t=null,0===o&&a('"."')),null!==t&&null!==(r=null!==(r=h())?r:"")&&null!==(s=null!==(s=h())?s:"")&&null!==(l=null!==(l=h())?l:"")?t=[t,r,s,l]:(t=null,i=d),null!==(t=null!==t?t:"")?e=[e,t]:(e=null,i=c)):(e=null,i=c),null!==e&&(f=u,e=parseFloat(n.substring(i,f))),null===e&&(i=u),e}function St(){var e,t,n,r,s,o,l,u;return r=i,s=i,null!==(e=N())?(o=i,null!==(t=M())&&null!==(n=Et())?t=[t,n]:(t=null,i=o),null!==(t=null!==t?t:"")?e=[e,t]:(e=null,i=s)):(e=null,i=s),null!==e&&(l=e[0],u=e[1],jn.params||(jn.params={}),u=void 0===u?void 0:u[1],e=void(jn.params[l.toLowerCase()]=u)),null===e&&(i=r),e}function Et(){var e;return null===(e=N())&&null===(e=le())&&(e=z()),e}function At(){var e;return"render"===n.substr(i,6).toLowerCase()?(e=n.substr(i,6),i+=6):(e=null,0===o&&a('"render"')),null===e&&("session"===n.substr(i,7).toLowerCase()?(e=n.substr(i,7),i+=7):(e=null,0===o&&a('"session"')),null===e&&("icon"===n.substr(i,4).toLowerCase()?(e=n.substr(i,4),i+=4):(e=null,0===o&&a('"icon"')),null===e&&("alert"===n.substr(i,5).toLowerCase()?(e=n.substr(i,5),i+=5):(e=null,0===o&&a('"alert"')),null===e&&(e=N())))),e}function Rt(){var e;return null===(e=wt())&&(e=St()),e}function wt(){var e,t,r,s;return s=i,"handling"===n.substr(i,8).toLowerCase()?(e=n.substr(i,8),i+=8):(e=null,0===o&&a('"handling"')),null!==e&&null!==(t=M())?("optional"===n.substr(i,8).toLowerCase()?(r=n.substr(i,8),i+=8):(r=null,0===o&&a('"optional"')),null===r&&("required"===n.substr(i,8).toLowerCase()?(r=n.substr(i,8),i+=8):(r=null,0===o&&a('"required"')),null===r&&(r=N())),null!==r?e=[e,t,r]:(e=null,i=s)):(e=null,i=s),e}function It(){var e,t,n,r,s,o,l,u;if(l=i,null!==(e=Ot()))if(null!==(t=P()))if(null!==(n=Dt())){for(r=[],u=i,null!==(s=G())&&null!==(o=Pt())?s=[s,o]:(s=null,i=u);null!==s;)r.push(s),u=i,null!==(s=G())&&null!==(o=Pt())?s=[s,o]:(s=null,i=u);null!==r?e=[e,t,n,r]:(e=null,i=l)}else e=null,i=l;else e=null,i=l;else e=null,i=l;return e}function Ot(){var e;return null===(e=kt())&&(e=Nt()),e}function kt(){var e;return"text"===n.substr(i,4).toLowerCase()?(e=n.substr(i,4),i+=4):(e=null,0===o&&a('"text"')),null===e&&("image"===n.substr(i,5).toLowerCase()?(e=n.substr(i,5),i+=5):(e=null,0===o&&a('"image"')),null===e&&("audio"===n.substr(i,5).toLowerCase()?(e=n.substr(i,5),i+=5):(e=null,0===o&&a('"audio"')),null===e&&("video"===n.substr(i,5).toLowerCase()?(e=n.substr(i,5),i+=5):(e=null,0===o&&a('"video"')),null===e&&("application"===n.substr(i,11).toLowerCase()?(e=n.substr(i,11),i+=11):(e=null,0===o&&a('"application"')),null===e&&(e=Ut()))))),e}function Nt(){var e;return"message"===n.substr(i,7).toLowerCase()?(e=n.substr(i,7),i+=7):(e=null,0===o&&a('"message"')),null===e&&("multipart"===n.substr(i,9).toLowerCase()?(e=n.substr(i,9),i+=9):(e=null,0===o&&a('"multipart"')),null===e&&(e=Ut())),e}function Ut(){var e;return null===(e=N())&&(e=xt()),e}function xt(){var e,t,r;return r=i,"x-"===n.substr(i,2).toLowerCase()?(e=n.substr(i,2),i+=2):(e=null,0===o&&a('"x-"')),null!==e&&null!==(t=N())?e=[e,t]:(e=null,i=r),e}function Dt(){var e;return null===(e=Ut())&&(e=N()),e}function Pt(){var e,t,n,r;return r=i,null!==(e=N())&&null!==(t=M())&&null!==(n=Mt())?e=[e,t,n]:(e=null,i=r),e}function Mt(){var e;return null===(e=N())&&(e=z()),e}function qt(){var e,t,n,r;if(n=i,null!==(t=h()))for(e=[];null!==t;)e.push(t),t=h();else e=null;return null!==e&&(r=e,e=void(jn.value=parseInt(r.join("")))),null===e&&(i=n),e}function Lt(){var e,t,r,s,l,u;if(l=i,null!==(e=U())){for(t=[],u=i,46===n.charCodeAt(i)?(r=".",i++):(r=null,0===o&&a('"."')),null!==r&&null!==(s=U())?r=[r,s]:(r=null,i=u);null!==r;)t.push(r),u=i,46===n.charCodeAt(i)?(r=".",i++):(r=null,0===o&&a('"."')),null!==r&&null!==(s=U())?r=[r,s]:(r=null,i=u);null!==t?e=[e,t]:(e=null,i=l)}else e=null,i=l;return e}function Ht(){var e;return null===(e=Ft())&&(e=St()),e}function Ft(){var e,t,r,s,l,u;return s=i,l=i,"tag"===n.substr(i,3).toLowerCase()?(e=n.substr(i,3),i+=3):(e=null,0===o&&a('"tag"')),null!==e&&null!==(t=M())&&null!==(r=N())?e=[e,t,r]:(e=null,i=l),null!==e&&(u=e[2],e=void(jn.tag=u)),null===e&&(i=s),e}function jt(){var e,t,r,s,l,u,c,h;if(c=i,"digest"===n.substr(i,6).toLowerCase()?(e=n.substr(i,6),i+=6):(e=null,0===o&&a('"Digest"')),null!==e)if(null!==(t=E()))if(null!==(r=Vt())){for(s=[],h=i,null!==(l=j())&&null!==(u=Vt())?l=[l,u]:(l=null,i=h);null!==l;)s.push(l),h=i,null!==(l=j())&&null!==(u=Vt())?l=[l,u]:(l=null,i=h);null!==s?e=[e,t,r,s]:(e=null,i=c)}else e=null,i=c;else e=null,i=c;else e=null,i=c;return null===e&&(e=Gt()),e}function Gt(){var e,t,n,r,s,o,l,u;if(l=i,null!==(e=N()))if(null!==(t=E()))if(null!==(n=Wt())){for(r=[],u=i,null!==(s=j())&&null!==(o=Wt())?s=[s,o]:(s=null,i=u);null!==s;)r.push(s),u=i,null!==(s=j())&&null!==(o=Wt())?s=[s,o]:(s=null,i=u);null!==r?e=[e,t,n,r]:(e=null,i=l)}else e=null,i=l;else e=null,i=l;else e=null,i=l;return e}function Wt(){var e,t,n,r;return r=i,null!==(e=N())&&null!==(t=M())?(null===(n=N())&&(n=z()),null!==n?e=[e,t,n]:(e=null,i=r)):(e=null,i=r),e}function Vt(){var e;return null===(e=Bt())&&null===(e=zt())&&null===(e=$t())&&null===(e=Jt())&&null===(e=Qt())&&null===(e=Zt())&&null===(e=en())&&(e=Wt()),e}function Bt(){var e,t,r,s;return s=i,"realm"===n.substr(i,5).toLowerCase()?(e=n.substr(i,5),i+=5):(e=null,0===o&&a('"realm"')),null!==e&&null!==(t=M())&&null!==(r=Kt())?e=[e,t,r]:(e=null,i=s),e}function Kt(){var e,t,n;return t=i,null!==(e=Y())&&(n=e,e=void(jn.realm=n)),null===e&&(i=t),e}function zt(){var e,t,r,s,l,u,c,h,d;if(h=i,"domain"===n.substr(i,6).toLowerCase()?(e=n.substr(i,6),i+=6):(e=null,0===o&&a('"domain"')),null!==e)if(null!==(t=M()))if(null!==(r=V()))if(null!==(s=Yt())){if(l=[],d=i,null!==(c=v()))for(u=[];null!==c;)u.push(c),c=v();else u=null;for(null!==u&&null!==(c=Yt())?u=[u,c]:(u=null,i=d);null!==u;){if(l.push(u),d=i,null!==(c=v()))for(u=[];null!==c;)u.push(c),c=v();else u=null;null!==u&&null!==(c=Yt())?u=[u,c]:(u=null,i=d)}null!==l&&null!==(u=B())?e=[e,t,r,s,l,u]:(e=null,i=h)}else e=null,i=h;else e=null,i=h;else e=null,i=h;else e=null,i=h;return e}function Yt(){var e;return null===(e=Le())&&(e=je()),e}function $t(){var e,t,r,s;return s=i,"nonce"===n.substr(i,5).toLowerCase()?(e=n.substr(i,5),i+=5):(e=null,0===o&&a('"nonce"')),null!==e&&null!==(t=M())&&null!==(r=Xt())?e=[e,t,r]:(e=null,i=s),e}function Xt(){var e,t,n;return t=i,null!==(e=Y())&&(n=e,e=void(jn.nonce=n)),null===e&&(i=t),e}function Jt(){var e,t,r,s,l,u;return s=i,l=i,"opaque"===n.substr(i,6).toLowerCase()?(e=n.substr(i,6),i+=6):(e=null,0===o&&a('"opaque"')),null!==e&&null!==(t=M())&&null!==(r=Y())?e=[e,t,r]:(e=null,i=l),null!==e&&(u=e[2],e=void(jn.opaque=u)),null===e&&(i=s),e}function Qt(){var e,t,r,s,l;return s=i,"stale"===n.substr(i,5).toLowerCase()?(e=n.substr(i,5),i+=5):(e=null,0===o&&a('"stale"')),null!==e&&null!==(t=M())?(l=i,"true"===n.substr(i,4).toLowerCase()?(r=n.substr(i,4),i+=4):(r=null,0===o&&a('"true"')),null!==r&&(r=void(jn.stale=!0)),null===r&&(i=l),null===r&&(l=i,"false"===n.substr(i,5).toLowerCase()?(r=n.substr(i,5),i+=5):(r=null,0===o&&a('"false"')),null!==r&&(r=void(jn.stale=!1)),null===r&&(i=l)),null!==r?e=[e,t,r]:(e=null,i=s)):(e=null,i=s),e}function Zt(){var e,t,r,s,l,u;return s=i,l=i,"algorithm"===n.substr(i,9).toLowerCase()?(e=n.substr(i,9),i+=9):(e=null,0===o&&a('"algorithm"')),null!==e&&null!==(t=M())?("md5"===n.substr(i,3).toLowerCase()?(r=n.substr(i,3),i+=3):(r=null,0===o&&a('"MD5"')),null===r&&("md5-sess"===n.substr(i,8).toLowerCase()?(r=n.substr(i,8),i+=8):(r=null,0===o&&a('"MD5-sess"')),null===r&&(r=N())),null!==r?e=[e,t,r]:(e=null,i=l)):(e=null,i=l),null!==e&&(u=e[2],e=void(jn.algorithm=u.toUpperCase())),null===e&&(i=s),e}function en(){var e,t,r,s,l,u,c,h,d,f;if(h=i,"qop"===n.substr(i,3).toLowerCase()?(e=n.substr(i,3),i+=3):(e=null,0===o&&a('"qop"')),null!==e)if(null!==(t=M()))if(null!==(r=V())){if(d=i,null!==(s=tn())){for(l=[],f=i,44===n.charCodeAt(i)?(u=",",i++):(u=null,0===o&&a('","')),null!==u&&null!==(c=tn())?u=[u,c]:(u=null,i=f);null!==u;)l.push(u),f=i,44===n.charCodeAt(i)?(u=",",i++):(u=null,0===o&&a('","')),null!==u&&null!==(c=tn())?u=[u,c]:(u=null,i=f);null!==l?s=[s,l]:(s=null,i=d)}else s=null,i=d;null!==s&&null!==(l=B())?e=[e,t,r,s,l]:(e=null,i=h)}else e=null,i=h;else e=null,i=h;else e=null,i=h;return e}function tn(){var e,t,r;return t=i,"auth-int"===n.substr(i,8).toLowerCase()?(e=n.substr(i,8),i+=8):(e=null,0===o&&a('"auth-int"')),null===e&&("auth"===n.substr(i,4).toLowerCase()?(e=n.substr(i,4),i+=4):(e=null,0===o&&a('"auth"')),null===e&&(e=N())),null!==e&&(r=e,jn.qop||(jn.qop=[]),e=void jn.qop.push(r.toLowerCase())),null===e&&(i=t),e}function nn(){var e,t,n,r,s,o,l;if(s=i,o=i,null!==(e=mt())){for(t=[],l=i,null!==(n=G())&&null!==(r=St())?n=[n,r]:(n=null,i=l);null!==n;)t.push(n),l=i,null!==(n=G())&&null!==(r=St())?n=[n,r]:(n=null,i=l);null!==t?e=[e,t]:(e=null,i=o)}else e=null,i=o;return null!==e&&(e=function(e){var t;jn.multi_header||(jn.multi_header=[]);try{t=new Fn(jn.uri,jn.display_name,jn.params),delete jn.uri,delete jn.display_name,delete jn.params}catch(e){t=null}jn.multi_header.push({possition:i,offset:e,parsed:t})}(s)),null===e&&(i=s),e}function rn(){var e;return null===(e=sn())&&(e=St()),e}function sn(){var e,t,r,s,l,u,c;if(l=i,u=i,"cause"===n.substr(i,5).toLowerCase()?(e=n.substr(i,5),i+=5):(e=null,0===o&&a('"cause"')),null!==e)if(null!==(t=M())){if(null!==(s=h()))for(r=[];null!==s;)r.push(s),s=h();else r=null;null!==r?e=[e,t,r]:(e=null,i=u)}else e=null,i=u;else e=null,i=u;return null!==e&&(c=e[2],e=void(jn.cause=parseInt(c.join("")))),null===e&&(i=l),e}function on(){var e,t,n,r,s,o;if(s=i,null!==(e=mt())){for(t=[],o=i,null!==(n=G())&&null!==(r=St())?n=[n,r]:(n=null,i=o);null!==n;)t.push(n),o=i,null!==(n=G())&&null!==(r=St())?n=[n,r]:(n=null,i=o);null!==t?e=[e,t]:(e=null,i=s)}else e=null,i=s;return e}function ln(){var e,t,r;return t=i,"active"===n.substr(i,6).toLowerCase()?(e=n.substr(i,6),i+=6):(e=null,0===o&&a('"active"')),null===e&&("pending"===n.substr(i,7).toLowerCase()?(e=n.substr(i,7),i+=7):(e=null,0===o&&a('"pending"')),null===e&&("terminated"===n.substr(i,10).toLowerCase()?(e=n.substr(i,10),i+=10):(e=null,0===o&&a('"terminated"')),null===e&&(e=N()))),null!==e&&(r=t,e=void(jn.state=n.substring(i,r))),null===e&&(i=t),e}function un(){var e,t,r,s,l,u,c,h;return s=i,l=i,"reason"===n.substr(i,6).toLowerCase()?(e=n.substr(i,6),i+=6):(e=null,0===o&&a('"reason"')),null!==e&&null!==(t=M())&&null!==(r=an())?e=[e,t,r]:(e=null,i=l),null!==e&&(e=void(void 0!==(u=e[2])&&(jn.reason=u))),null===e&&(i=s),null===e&&(s=i,l=i,"expires"===n.substr(i,7).toLowerCase()?(e=n.substr(i,7),i+=7):(e=null,0===o&&a('"expires"')),null!==e&&null!==(t=M())&&null!==(r=Ct())?e=[e,t,r]:(e=null,i=l),null!==e&&(e=void(void 0!==(h=e[2])&&(jn.expires=h))),null===e&&(i=s),null===e&&(s=i,l=i,"retry_after"===n.substr(i,11).toLowerCase()?(e=n.substr(i,11),i+=11):(e=null,0===o&&a('"retry_after"')),null!==e&&null!==(t=M())&&null!==(r=Ct())?e=[e,t,r]:(e=null,i=l),null!==e&&(e=void(void 0!==(c=e[2])&&(jn.retry_after=c))),null===e&&(i=s),null===e&&(e=St()))),e}function an(){var e;return"deactivated"===n.substr(i,11).toLowerCase()?(e=n.substr(i,11),i+=11):(e=null,0===o&&a('"deactivated"')),null===e&&("probation"===n.substr(i,9).toLowerCase()?(e=n.substr(i,9),i+=9):(e=null,0===o&&a('"probation"')),null===e&&("rejected"===n.substr(i,8).toLowerCase()?(e=n.substr(i,8),i+=8):(e=null,0===o&&a('"rejected"')),null===e&&("timeout"===n.substr(i,7).toLowerCase()?(e=n.substr(i,7),i+=7):(e=null,0===o&&a('"timeout"')),null===e&&("giveup"===n.substr(i,6).toLowerCase()?(e=n.substr(i,6),i+=6):(e=null,0===o&&a('"giveup"')),null===e&&("noresource"===n.substr(i,10).toLowerCase()?(e=n.substr(i,10),i+=10):(e=null,0===o&&a('"noresource"')),null===e&&("invariant"===n.substr(i,9).toLowerCase()?(e=n.substr(i,9),i+=9):(e=null,0===o&&a('"invariant"')),null===e&&(e=N()))))))),e}function cn(){var e;return null===(e=Ft())&&(e=St()),e}function hn(){var e,t,n,r,s,o,l,u;if(l=i,null!==(e=yn()))if(null!==(t=E()))if(null!==(n=bn())){for(r=[],u=i,null!==(s=G())&&null!==(o=dn())?s=[s,o]:(s=null,i=u);null!==s;)r.push(s),u=i,null!==(s=G())&&null!==(o=dn())?s=[s,o]:(s=null,i=u);null!==r?e=[e,t,n,r]:(e=null,i=l)}else e=null,i=l;else e=null,i=l;else e=null,i=l;return e}function dn(){var e;return null===(e=fn())&&null===(e=_n())&&null===(e=pn())&&null===(e=mn())&&null===(e=vn())&&(e=St()),e}function fn(){var e,t,r,s,l,u;return s=i,l=i,"ttl"===n.substr(i,3).toLowerCase()?(e=n.substr(i,3),i+=3):(e=null,0===o&&a('"ttl"')),null!==e&&null!==(t=M())&&null!==(r=An())?e=[e,t,r]:(e=null,i=l),null!==e&&(u=e[2],e=void(jn.ttl=u)),null===e&&(i=s),e}function _n(){var e,t,r,s,l,u;return s=i,l=i,"maddr"===n.substr(i,5).toLowerCase()?(e=n.substr(i,5),i+=5):(e=null,0===o&&a('"maddr"')),null!==e&&null!==(t=M())&&null!==(r=le())?e=[e,t,r]:(e=null,i=l),null!==e&&(u=e[2],e=void(jn.maddr=u)),null===e&&(i=s),e}function pn(){var e,t,r,s,l,u;return s=i,l=i,"received"===n.substr(i,8).toLowerCase()?(e=n.substr(i,8),i+=8):(e=null,0===o&&a('"received"')),null!==e&&null!==(t=M())?(null===(r=pe())&&(r=de()),null!==r?e=[e,t,r]:(e=null,i=l)):(e=null,i=l),null!==e&&(u=e[2],e=void(jn.received=u)),null===e&&(i=s),e}function mn(){var e,t,r,s,l,u;return s=i,l=i,"branch"===n.substr(i,6).toLowerCase()?(e=n.substr(i,6),i+=6):(e=null,0===o&&a('"branch"')),null!==e&&null!==(t=M())&&null!==(r=N())?e=[e,t,r]:(e=null,i=l),null!==e&&(u=e[2],e=void(jn.branch=u)),null===e&&(i=s),e}function vn(){var e,t,r,s,l;return s=i,"rport"===n.substr(i,5).toLowerCase()?(e=n.substr(i,5),i+=5):(e=null,0===o&&a('"rport"')),null!==e?(l=i,null!==(t=M())&&null!==(r=gn())?t=[t,r]:(t=null,i=l),null!==(t=null!==t?t:"")?e=[e,t]:(e=null,i=s)):(e=null,i=s),e}function gn(){var e,t,n,r,s,o,l,u;return o=i,l=i,null!==(e=null!==(e=h())?e:"")&&null!==(t=null!==(t=h())?t:"")&&null!==(n=null!==(n=h())?n:"")&&null!==(r=null!==(r=h())?r:"")&&null!==(s=null!==(s=h())?s:"")?e=[e,t,n,r,s]:(e=null,i=l),null!==e&&(u=e,e=void(jn.rport=parseInt(u.join("")))),null===e&&(i=o),e}function yn(){var e,t,n,r,s,o;return o=i,null!==(e=Tn())&&null!==(t=P())&&null!==(n=N())&&null!==(r=P())&&null!==(s=Cn())?e=[e,t,n,r,s]:(e=null,i=o),e}function Tn(){var e,t,r;return t=i,"sip"===n.substr(i,3).toLowerCase()?(e=n.substr(i,3),i+=3):(e=null,0===o&&a('"SIP"')),null===e&&(e=N()),null!==e&&(r=e,e=void(jn.protocol=r)),null===e&&(i=t),e}function Cn(){var e,t,r;return t=i,"udp"===n.substr(i,3).toLowerCase()?(e=n.substr(i,3),i+=3):(e=null,0===o&&a('"UDP"')),null===e&&("tcp"===n.substr(i,3).toLowerCase()?(e=n.substr(i,3),i+=3):(e=null,0===o&&a('"TCP"')),null===e&&("tls"===n.substr(i,3).toLowerCase()?(e=n.substr(i,3),i+=3):(e=null,0===o&&a('"TLS"')),null===e&&("sctp"===n.substr(i,4).toLowerCase()?(e=n.substr(i,4),i+=4):(e=null,0===o&&a('"SCTP"')),null===e&&(e=N())))),null!==e&&(r=e,e=void(jn.transport=r)),null===e&&(i=t),e}function bn(){var e,t,n,r,s;return r=i,null!==(e=Sn())?(s=i,null!==(t=W())&&null!==(n=En())?t=[t,n]:(t=null,i=s),null!==(t=null!==t?t:"")?e=[e,t]:(e=null,i=r)):(e=null,i=r),e}function Sn(){var e,t,r;return t=i,null===(e=pe())&&null===(e=he())&&(e=ue()),null!==e&&(r=t,e=void(jn.host=n.substring(i,r))),null===e&&(i=t),e}function En(){var e,t,n,r,s,o,l,u;return o=i,l=i,null!==(e=null!==(e=h())?e:"")&&null!==(t=null!==(t=h())?t:"")&&null!==(n=null!==(n=h())?n:"")&&null!==(r=null!==(r=h())?r:"")&&null!==(s=null!==(s=h())?s:"")?e=[e,t,n,r,s]:(e=null,i=l),null!==e&&(u=e,e=void(jn.port=parseInt(u.join("")))),null===e&&(i=o),e}function An(){var e,t,n,r,s;return r=i,s=i,null!==(e=h())&&null!==(t=null!==(t=h())?t:"")&&null!==(n=null!==(n=h())?n:"")?e=[e,t,n]:(e=null,i=s),null!==e&&(e=parseInt(e.join(""))),null===e&&(i=r),e}function Rn(){var e,t,n;return t=i,null!==(e=Ct())&&(n=e,e=void(jn.expires=n)),null===e&&(i=t),e}function wn(){var e;return null===(e=In())&&(e=St()),e}function In(){var e,t,r,s,l,u;return s=i,l=i,"refresher"===n.substr(i,9).toLowerCase()?(e=n.substr(i,9),i+=9):(e=null,0===o&&a('"refresher"')),null!==e&&null!==(t=M())?("uac"===n.substr(i,3).toLowerCase()?(r=n.substr(i,3),i+=3):(r=null,0===o&&a('"uac"')),null===r&&("uas"===n.substr(i,3).toLowerCase()?(r=n.substr(i,3),i+=3):(r=null,0===o&&a('"uas"'))),null!==r?e=[e,t,r]:(e=null,i=l)):(e=null,i=l),null!==e&&(u=e[2],e=void(jn.refresher=u.toLowerCase())),null===e&&(i=s),e}function On(){var e,t;for(e=[],null===(t=I())&&null===(t=k())&&(t=E());null!==t;)e.push(t),null===(t=I())&&null===(t=k())&&(t=E());return e}function kn(){var e,t,r,s,l,u,c,h,d,f,_,p;return f=i,_=i,null!==(e=Un())?(45===n.charCodeAt(i)?(t="-",i++):(t=null,0===o&&a('"-"')),null!==t&&null!==(r=Nn())?(45===n.charCodeAt(i)?(s="-",i++):(s=null,0===o&&a('"-"')),null!==s&&null!==(l=Nn())?(45===n.charCodeAt(i)?(u="-",i++):(u=null,0===o&&a('"-"')),null!==u&&null!==(c=Nn())?(45===n.charCodeAt(i)?(h="-",i++):(h=null,0===o&&a('"-"')),null!==h&&null!==(d=xn())?e=[e,t,r,s,l,u,c,h,d]:(e=null,i=_)):(e=null,i=_)):(e=null,i=_)):(e=null,i=_)):(e=null,i=_),null!==e&&(p=f,e[0],e=void(jn=n.substring(i+5,p))),null===e&&(i=f),e}function Nn(){var e,t,n,r,s;return s=i,null!==(e=f())&&null!==(t=f())&&null!==(n=f())&&null!==(r=f())?e=[e,t,n,r]:(e=null,i=s),e}function Un(){var e,t,n;return n=i,null!==(e=Nn())&&null!==(t=Nn())?e=[e,t]:(e=null,i=n),e}function xn(){var e,t,n,r;return r=i,null!==(e=Nn())&&null!==(t=Nn())&&null!==(n=Nn())?e=[e,t,n]:(e=null,i=r),e}function Dn(){var e,t,r,s,l,u,c;return s=i,l=i,null!==(e=x())?(u=i,64===n.charCodeAt(i)?(t="@",i++):(t=null,0===o&&a('"@"')),null!==t&&null!==(r=x())?t=[t,r]:(t=null,i=u),null!==(t=null!==t?t:"")?e=[e,t]:(e=null,i=l)):(e=null,i=l),null!==e&&(c=s,e=void(jn.call_id=n.substring(i,c))),null===e&&(i=s),e}function Pn(){var e;return null===(e=Mn())&&null===(e=qn())&&null===(e=Ln())&&(e=St()),e}function Mn(){var e,t,r,s,l,u;return s=i,l=i,"to-tag"===n.substr(i,6)?(e="to-tag",i+=6):(e=null,0===o&&a('"to-tag"')),null!==e&&null!==(t=M())&&null!==(r=N())?e=[e,t,r]:(e=null,i=l),null!==e&&(u=e[2],e=void(jn.to_tag=u)),null===e&&(i=s),e}function qn(){var e,t,r,s,l,u;return s=i,l=i,"from-tag"===n.substr(i,8)?(e="from-tag",i+=8):(e=null,0===o&&a('"from-tag"')),null!==e&&null!==(t=M())&&null!==(r=N())?e=[e,t,r]:(e=null,i=l),null!==e&&(u=e[2],e=void(jn.from_tag=u)),null===e&&(i=s),e}function Ln(){var e,t;return t=i,"early-only"===n.substr(i,10)?(e="early-only",i+=10):(e=null,0===o&&a('"early-only"')),null!==e&&(e=void(jn.early_only=!0)),null===e&&(i=t),e}var Hn=e("./URI"),Fn=e("./NameAddrHeader"),jn={};if(null===s[r]()||i!==n.length){var Gn=Math.max(i,l),Wn=Gn2&&void 0!==arguments[2]?arguments[2]:{},s=e;if(void 0===e||void 0===t)throw new TypeError("Not enough arguments");if(!(e=this._ua.normalizeTarget(e)))throw new TypeError("Invalid target: ".concat(s));var i=d.cloneArray(r.extraHeaders),o=d.cloneObject(r.eventHandlers),l=r.contentType||"text/plain",u={};for(var a in r.fromUserName&&(u.from_uri=new p("sip",r.fromUserName,this._ua.configuration.uri.host),i.push("P-Preferred-Identity: ".concat(this._ua.configuration.uri.toString()))),r.fromDisplayName&&(u.from_display_name=r.fromDisplayName),o)Object.prototype.hasOwnProperty.call(o,a)&&this.on(a,o[a]);i.push("Content-Type: ".concat(l)),this._request=new h.OutgoingRequest(c.MESSAGE,e,this._ua,u,i),t&&(this._request.body=t);var _=new f(this._ua,this._request,{onRequestTimeout:function(){n._onRequestTimeout()},onTransportError:function(){n._onTransportError()},onReceiveResponse:function(e){n._receiveResponse(e)}});this._newMessage("local",this._request),_.send()}},{key:"init_incoming",value:function(e){this._request=e,this._newMessage("remote",e),this._is_replied||(this._is_replied=!0,e.reply(200)),this._close()}},{key:"accept",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=d.cloneArray(e.extraHeaders),n=e.body;if("incoming"!==this._direction)throw new _.NotSupportedError('"accept" not supported for outgoing Message');if(this._is_replied)throw new Error("incoming Message already replied");this._is_replied=!0,this._request.reply(200,null,t,n)}},{key:"reject",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.status_code||480,n=e.reason_phrase,r=d.cloneArray(e.extraHeaders),s=e.body;if("incoming"!==this._direction)throw new _.NotSupportedError('"reject" not supported for outgoing Message');if(this._is_replied)throw new Error("incoming Message already replied");if(t<300||t>=700)throw new TypeError("Invalid status_code: ".concat(t));this._is_replied=!0,this._request.reply(t,n,r,s)}},{key:"_receiveResponse",value:function(e){if(!this._closed)switch(!0){case/^1[0-9]{2}$/.test(e.status_code):break;case/^2[0-9]{2}$/.test(e.status_code):this._succeeded("remote",e);break;default:var t=d.sipErrorCause(e.status_code);this._failed("remote",e,t)}}},{key:"_onRequestTimeout",value:function(){this._closed||this._failed("system",null,c.causes.REQUEST_TIMEOUT)}},{key:"_onTransportError",value:function(){this._closed||this._failed("system",null,c.causes.CONNECTION_ERROR)}},{key:"_close",value:function(){this._closed=!0,this._ua.destroyMessage(this)}},{key:"_newMessage",value:function(e,t){"remote"===e?(this._direction="incoming",this._local_identity=t.to,this._remote_identity=t.from):"local"===e&&(this._direction="outgoing",this._local_identity=t.from,this._remote_identity=t.to),this._ua.newMessage(this,{originator:e,message:this,request:t})}},{key:"_failed",value:function(e,t,n){m.debug("MESSAGE failed"),this._close(),m.debug('emit "failed"'),this.emit("failed",{originator:e,response:t||null,cause:n})}},{key:"_succeeded",value:function(e,t){m.debug("MESSAGE succeeded"),this._close(),m.debug('emit "succeeded"'),this.emit("succeeded",{originator:e,response:t})}},{key:"direction",get:function(){return this._direction}},{key:"local_identity",get:function(){return this._local_identity}},{key:"remote_identity",get:function(){return this._remote_identity}}])&&s(t.prototype,n),r&&s(t,r),a}()},{"./Constants":2,"./Exceptions":6,"./Logger":9,"./RequestSender":20,"./SIPMessage":21,"./URI":27,"./Utils":28,events:31}],11:[function(e,t,n){"use strict";function r(e,t){for(var n=0;n"),this._parameters)Object.prototype.hasOwnProperty.call(this._parameters,t)&&(e+=";".concat(t),null!==this._parameters[t]&&(e+="=".concat(this._parameters[t])));return e}},{key:"uri",get:function(){return this._uri}},{key:"display_name",get:function(){return this._display_name},set:function(e){this._display_name=0===e?"0":e}}]),e}()},{"./Grammar":7,"./URI":27}],12:[function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function s(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},s=e;if(void 0===e)throw new TypeError("A target is required for OPTIONS");if(!(e=this._ua.normalizeTarget(e)))throw new TypeError("Invalid target: ".concat(s));var i=d.cloneArray(r.extraHeaders),o=d.cloneObject(r.eventHandlers),l=r.contentType||"application/sdp";for(var u in o)Object.prototype.hasOwnProperty.call(o,u)&&this.on(u,o[u]);i.push("Content-Type: ".concat(l)),this._request=new h.OutgoingRequest(c.OPTIONS,e,this._ua,null,i),t&&(this._request.body=t);var a=new f(this._ua,this._request,{onRequestTimeout:function(){n._onRequestTimeout()},onTransportError:function(){n._onTransportError()},onReceiveResponse:function(e){n._receiveResponse(e)}});this._newOptions("local",this._request),a.send()}},{key:"init_incoming",value:function(e){this._request=e,this._newOptions("remote",e),this._is_replied||(this._is_replied=!0,e.reply(200)),this._close()}},{key:"accept",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=d.cloneArray(e.extraHeaders),n=e.body;if("incoming"!==this._direction)throw new _.NotSupportedError('"accept" not supported for outgoing Options');if(this._is_replied)throw new Error("incoming Options already replied");this._is_replied=!0,this._request.reply(200,null,t,n)}},{key:"reject",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.status_code||480,n=e.reason_phrase,r=d.cloneArray(e.extraHeaders),s=e.body;if("incoming"!==this._direction)throw new _.NotSupportedError('"reject" not supported for outgoing Options');if(this._is_replied)throw new Error("incoming Options already replied");if(t<300||t>=700)throw new TypeError("Invalid status_code: ".concat(t));this._is_replied=!0,this._request.reply(t,n,r,s)}},{key:"_receiveResponse",value:function(e){if(!this._closed)switch(!0){case/^1[0-9]{2}$/.test(e.status_code):break;case/^2[0-9]{2}$/.test(e.status_code):this._succeeded("remote",e);break;default:var t=d.sipErrorCause(e.status_code);this._failed("remote",e,t)}}},{key:"_onRequestTimeout",value:function(){this._closed||this._failed("system",null,c.causes.REQUEST_TIMEOUT)}},{key:"_onTransportError",value:function(){this._closed||this._failed("system",null,c.causes.CONNECTION_ERROR)}},{key:"_close",value:function(){this._closed=!0,this._ua.destroyMessage(this)}},{key:"_newOptions",value:function(e,t){"remote"===e?(this._direction="incoming",this._local_identity=t.to,this._remote_identity=t.from):"local"===e&&(this._direction="outgoing",this._local_identity=t.from,this._remote_identity=t.to),this._ua.newOptions(this,{originator:e,message:this,request:t})}},{key:"_failed",value:function(e,t,n){p.debug("OPTIONS failed"),this._close(),p.debug('emit "failed"'),this.emit("failed",{originator:e,response:t||null,cause:n})}},{key:"_succeeded",value:function(e,t){p.debug("OPTIONS succeeded"),this._close(),p.debug('emit "succeeded"'),this.emit("succeeded",{originator:e,response:t})}},{key:"direction",get:function(){return this._direction}},{key:"local_identity",get:function(){return this._local_identity}},{key:"remote_identity",get:function(){return this._remote_identity}}])&&s(t.prototype,n),r&&s(t,r),a}()},{"./Constants":2,"./Exceptions":6,"./Logger":9,"./RequestSender":20,"./SIPMessage":21,"./Utils":28,events:31}],13:[function(e,t,n){"use strict";function r(e,t){var n;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return s(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return s(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,l=!0,u=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return l=e.done,e},e:function(e){u=!0,o=e},f:function(){try{l||null==n.return||n.return()}finally{if(u)throw o}}}}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:s}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,l=!0,u=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return l=e.done,e},e:function(e){u=!0,o=e},f:function(){try{l||null==n.return||n.return()}finally{if(u)throw o}}}}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0;w.debug("connect()");var r=e,s=v.cloneObject(t.eventHandlers),i=v.cloneArray(t.extraHeaders),o=v.cloneObject(t.mediaConstraints,{audio:!0,video:!0}),l=t.mediaStream||null,u=v.cloneObject(t.pcConfig,{iceServers:[]}),a=t.rtcConstraints||null,c=t.rtcOfferConstraints||null;if(this._rtcOfferConstraints=c,this._rtcAnswerConstraints=t.rtcAnswerConstraints||null,this._data=t.data||this._data,void 0===e)throw new TypeError("Not enough arguments");if(this._status!==I.STATUS_NULL)throw new p.InvalidStateError(this._status);if(!window.RTCPeerConnection)throw new p.NotSupportedError("WebRTC not supported");if(!(e=this._ua.normalizeTarget(e)))throw new TypeError("Invalid target: ".concat(r));for(var h in this._sessionTimers.enabled&&v.isDecimal(t.sessionTimersExpires)&&(t.sessionTimersExpires>=_.MIN_SESSION_EXPIRES?this._sessionTimers.defaultExpires=t.sessionTimersExpires:this._sessionTimers.defaultExpires=_.SESSION_EXPIRES),s)Object.prototype.hasOwnProperty.call(s,h)&&this.on(h,s[h]);this._from_tag=v.newTag();var d=t.anonymous||!1,f={from_tag:this._from_tag};this._contact=this._ua.contact.toString({anonymous:d,outbound:!0}),d?(f.from_display_name="Anonymous",f.from_uri=new R("sip","anonymous","anonymous.invalid"),i.push("P-Preferred-Identity: ".concat(this._ua.configuration.uri.toString())),i.push("Privacy: id")):t.fromUserName&&(f.from_uri=new R("sip",t.fromUserName,this._ua.configuration.uri.host),i.push("P-Preferred-Identity: ".concat(this._ua.configuration.uri.toString()))),t.fromDisplayName&&(f.from_display_name=t.fromDisplayName),i.push("Contact: ".concat(this._contact)),i.push("Content-Type: application/sdp"),this._sessionTimers.enabled&&i.push("Session-Expires: ".concat(this._sessionTimers.defaultExpires).concat(this._ua.configuration.session_timers_force_refresher?";refresher=uac":"")),this._request=new y.InitialOutgoingInviteRequest(e,this._ua,f,i),this._id=this._request.call_id+this._from_tag,this._createRTCConnection(u,a),this._direction="outgoing",this._local_identity=this._request.from,this._remote_identity=this._request.to,n&&n(this),this._newRTCSession("local",this._request),this._sendInitialRequest(o,c,l)}},{key:"init_incoming",value:function(e,t){var n,r=this;w.debug("init_incoming()");var s=e.hasHeader("Content-Type")?e.getHeader("Content-Type").toLowerCase():void 0;e.body&&"application/sdp"!==s?e.reply(415):(this._status=I.STATUS_INVITE_RECEIVED,this._from_tag=e.from_tag,this._id=e.call_id+this._from_tag,this._request=e,this._contact=this._ua.contact.toString(),e.hasHeader("expires")&&(n=1e3*e.getHeader("expires")),e.to_tag=v.newTag(),this._createDialog(e,"UAS",!0)?(e.body?this._late_sdp=!1:this._late_sdp=!0,this._status=I.STATUS_WAITING_FOR_ANSWER,this._timers.userNoAnswerTimer=setTimeout(function(){e.reply(408),r._failed("local",null,_.causes.NO_ANSWER)},this._ua.configuration.no_answer_timeout),n&&(this._timers.expiresTimer=setTimeout(function(){r._status===I.STATUS_WAITING_FOR_ANSWER&&(e.reply(487),r._failed("system",null,_.causes.EXPIRES))},n)),this._direction="incoming",this._local_identity=e.to,this._remote_identity=e.from,t&&t(this),this._newRTCSession("remote",e),this._status!==I.STATUS_TERMINATED&&(e.reply(180,null,["Contact: ".concat(this._contact)]),this._progress("local",null))):e.reply(500,"Missing Contact header field"))}},{key:"answer",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};w.debug("answer()");var n=this._request,r=v.cloneArray(t.extraHeaders),i=v.cloneObject(t.mediaConstraints),o=t.mediaStream||null,l=v.cloneObject(t.pcConfig,{iceServers:[]}),u=t.rtcConstraints||null,a=t.rtcAnswerConstraints||null,c=v.cloneObject(t.rtcOfferConstraints),h=!1,d=!1,f=!1,m=!1;if(this._rtcAnswerConstraints=a,this._rtcOfferConstraints=t.rtcOfferConstraints||null,this._data=t.data||this._data,"incoming"!==this._direction)throw new p.NotSupportedError('"answer" not supported for outgoing RTCSession');if(this._status!==I.STATUS_WAITING_FOR_ANSWER)throw new p.InvalidStateError(this._status);if(this._sessionTimers.enabled&&v.isDecimal(t.sessionTimersExpires)&&(t.sessionTimersExpires>=_.MIN_SESSION_EXPIRES?this._sessionTimers.defaultExpires=t.sessionTimersExpires:this._sessionTimers.defaultExpires=_.SESSION_EXPIRES),this._status=I.STATUS_ANSWERED,this._createDialog(n,"UAS")){clearTimeout(this._timers.userNoAnswerTimer),r.unshift("Contact: ".concat(this._contact));var g=n.parseSDP();Array.isArray(g.media)||(g.media=[g.media]);var y,T=s(g.media);try{for(T.s();!(y=T.n()).done;){var C=y.value;"audio"===C.type&&(h=!0,C.direction&&"sendrecv"!==C.direction||(f=!0)),"video"===C.type&&(d=!0,C.direction&&"sendrecv"!==C.direction||(m=!0))}}catch(e){T.e(e)}finally{T.f()}if(o&&!1===i.audio){var b,S=s(o.getAudioTracks());try{for(S.s();!(b=S.n()).done;){var E=b.value;o.removeTrack(E)}}catch(e){S.e(e)}finally{S.f()}}if(o&&!1===i.video){var A,R=s(o.getVideoTracks());try{for(R.s();!(A=R.n()).done;){var O=A.value;o.removeTrack(O)}}catch(e){R.e(e)}finally{R.f()}}o||void 0!==i.audio||(i.audio=f),o||void 0!==i.video||(i.video=m),o||h||c.offerToReceiveAudio||(i.audio=!1),o||d||c.offerToReceiveVideo||(i.video=!1),this._createRTCConnection(l,u),Promise.resolve().then(function(){return o||(i.audio||i.video?(e._localMediaStreamLocallyGenerated=!0,navigator.mediaDevices.getUserMedia(i).catch(function(t){if(e._status===I.STATUS_TERMINATED)throw new Error("terminated");throw n.reply(480),e._failed("local",null,_.causes.USER_DENIED_MEDIA_ACCESS),w.warn('emit "getusermediafailed" [error:%o]',t),e.emit("getusermediafailed",t),new Error("getUserMedia() failed")})):void 0)}).then(function(t){if(e._status===I.STATUS_TERMINATED)throw new Error("terminated");e._localMediaStream=t,t&&t.getTracks().forEach(function(n){e._connection.addTrack(n,t)})}).then(function(){if(!e._late_sdp){var t={originator:"remote",type:"offer",sdp:n.body};w.debug('emit "sdp"'),e.emit("sdp",t);var r=new RTCSessionDescription({type:"offer",sdp:t.sdp});return e._connectionPromiseQueue=e._connectionPromiseQueue.then(function(){return e._connection.setRemoteDescription(r)}).catch(function(t){throw n.reply(488),e._failed("system",null,_.causes.WEBRTC_ERROR),w.warn('emit "peerconnection:setremotedescriptionfailed" [error:%o]',t),e.emit("peerconnection:setremotedescriptionfailed",t),new Error("peerconnection.setRemoteDescription() failed")}),e._connectionPromiseQueue}}).then(function(){if(e._status===I.STATUS_TERMINATED)throw new Error("terminated");return e._connecting(n),e._late_sdp?e._createLocalDescription("offer",e._rtcOfferConstraints).catch(function(){throw n.reply(500),new Error("_createLocalDescription() failed")}):e._createLocalDescription("answer",a).catch(function(){throw n.reply(500),new Error("_createLocalDescription() failed")})}).then(function(t){if(e._status===I.STATUS_TERMINATED)throw new Error("terminated");e._handleSessionTimersInIncomingRequest(n,r),n.reply(200,null,r,t,function(){e._status=I.STATUS_WAITING_FOR_ACK,e._setInvite2xxTimer(n,t),e._setACKTimer(),e._accepted("local")},function(){e._failed("system",null,_.causes.CONNECTION_ERROR)})}).catch(function(t){e._status!==I.STATUS_TERMINATED&&w.warn(t)})}else n.reply(500,"Error creating dialog")}},{key:"terminate",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};w.debug("terminate()");var n,r=t.cause||_.causes.BYE,s=v.cloneArray(t.extraHeaders),i=t.body,o=t.status_code,l=t.reason_phrase;if(this._status===I.STATUS_TERMINATED)throw new p.InvalidStateError(this._status);switch(this._status){case I.STATUS_NULL:case I.STATUS_INVITE_SENT:case I.STATUS_1XX_RECEIVED:if(w.debug("canceling session"),o&&(o<200||o>=700))throw new TypeError("Invalid status_code: ".concat(o));o&&(l=l||_.REASON_PHRASE[o]||"",n="SIP ;cause=".concat(o,' ;text="').concat(l,'"')),this._status===I.STATUS_NULL||this._status===I.STATUS_INVITE_SENT?(this._is_canceled=!0,this._cancel_reason=n):this._status===I.STATUS_1XX_RECEIVED&&this._request.cancel(n),this._status=I.STATUS_CANCELED,this._failed("local",null,_.causes.CANCELED);break;case I.STATUS_WAITING_FOR_ANSWER:case I.STATUS_ANSWERED:if(w.debug("rejecting session"),(o=o||480)<300||o>=700)throw new TypeError("Invalid status_code: ".concat(o));this._request.reply(o,l,s,i),this._failed("local",null,_.causes.REJECTED);break;case I.STATUS_WAITING_FOR_ACK:case I.STATUS_CONFIRMED:if(w.debug("terminating session"),l=t.reason_phrase||_.REASON_PHRASE[o]||"",o&&(o<200||o>=700))throw new TypeError("Invalid status_code: ".concat(o));if(o&&s.push("Reason: SIP ;cause=".concat(o,'; text="').concat(l,'"')),this._status===I.STATUS_WAITING_FOR_ACK&&"incoming"===this._direction&&this._request.server_transaction.state!==m.C.STATUS_TERMINATED){var u=this._dialog;this.receiveRequest=function(t){t.method===_.ACK&&(e.sendRequest(_.BYE,{extraHeaders:s,body:i}),u.terminate())},this._request.server_transaction.on("stateChanged",function(){e._request.server_transaction.state===m.C.STATUS_TERMINATED&&(e.sendRequest(_.BYE,{extraHeaders:s,body:i}),u.terminate())}),this._ended("local",null,r),this._dialog=u,this._ua.newDialog(u)}else this.sendRequest(_.BYE,{extraHeaders:s,body:i}),this._ended("local",null,r)}}},{key:"sendDTMF",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};w.debug("sendDTMF() | tones: %s",e);var n=0,r=t.duration||null,s=t.interToneGap||null,i=t.transportType||_.DTMF_TRANSPORT.INFO;if(void 0===e)throw new TypeError("Not enough arguments");if(this._status!==I.STATUS_CONFIRMED&&this._status!==I.STATUS_WAITING_FOR_ACK&&this._status!==I.STATUS_1XX_RECEIVED)throw new p.InvalidStateError(this._status);if(i!==_.DTMF_TRANSPORT.INFO&&i!==_.DTMF_TRANSPORT.RFC2833)throw new TypeError("invalid transportType: ".concat(i));if("number"==typeof e&&(e=e.toString()),!e||"string"!=typeof e||!e.match(/^[0-9A-DR#*,]+$/i))throw new TypeError("Invalid tones: ".concat(e));if(r&&!v.isDecimal(r))throw new TypeError("Invalid tone duration: ".concat(r));if(r?rb.C.MAX_DURATION?(w.debug('"duration" value is greater than the maximum allowed, setting it to '.concat(b.C.MAX_DURATION," milliseconds")),r=b.C.MAX_DURATION):r=Math.abs(r):r=b.C.DEFAULT_DURATION,t.duration=r,s&&!v.isDecimal(s))throw new TypeError("Invalid interToneGap: ".concat(s));if(s?s=this._tones.length)return void(this._tones=null);var l=this._tones[n];n+=1;if(","===l)o=2e3;else{var u=new b(this);t.eventHandlers={onFailed:function(){i._tones=null}},u.send(l,t),o=r+s}setTimeout(e.bind(this),o)}.call(this));else{var o=this._getDTMFRTPSender();o&&(e=o.toneBuffer+e,o.insertDTMF(e,r,s))}}},{key:"sendInfo",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(w.debug("sendInfo()"),this._status!==I.STATUS_CONFIRMED&&this._status!==I.STATUS_WAITING_FOR_ACK&&this._status!==I.STATUS_1XX_RECEIVED)throw new p.InvalidStateError(this._status);new S(this).send(e,t,n)}},{key:"mute",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{audio:!0,video:!1};w.debug("mute()");var t=!1,n=!1;!1===this._audioMuted&&e.audio&&(t=!0,this._audioMuted=!0,this._toggleMuteAudio(!0)),!1===this._videoMuted&&e.video&&(n=!0,this._videoMuted=!0,this._toggleMuteVideo(!0)),!0!==t&&!0!==n||this._onmute({audio:t,video:n})}},{key:"unmute",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{audio:!0,video:!0};w.debug("unmute()");var t=!1,n=!1;!0===this._audioMuted&&e.audio&&(t=!0,this._audioMuted=!1,!1===this._localHold&&this._toggleMuteAudio(!1)),!0===this._videoMuted&&e.video&&(n=!0,this._videoMuted=!1,!1===this._localHold&&this._toggleMuteVideo(!1)),!0!==t&&!0!==n||this._onunmute({audio:t,video:n})}},{key:"hold",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0;if(w.debug("hold()"),this._status!==I.STATUS_WAITING_FOR_ACK&&this._status!==I.STATUS_CONFIRMED)return!1;if(!0===this._localHold)return!1;if(!this._isReadyToReOffer())return!1;this._localHold=!0,this._onhold("local");var r={succeeded:function(){n&&n()},failed:function(){e.terminate({cause:_.causes.WEBRTC_ERROR,status_code:500,reason_phrase:"Hold Failed"})}};return t.useUpdate?this._sendUpdate({sdpOffer:!0,eventHandlers:r,extraHeaders:t.extraHeaders}):this._sendReinvite({eventHandlers:r,extraHeaders:t.extraHeaders}),!0}},{key:"unhold",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0;if(w.debug("unhold()"),this._status!==I.STATUS_WAITING_FOR_ACK&&this._status!==I.STATUS_CONFIRMED)return!1;if(!1===this._localHold)return!1;if(!this._isReadyToReOffer())return!1;this._localHold=!1,this._onunhold("local");var r={succeeded:function(){n&&n()},failed:function(){e.terminate({cause:_.causes.WEBRTC_ERROR,status_code:500,reason_phrase:"Unhold Failed"})}};return t.useUpdate?this._sendUpdate({sdpOffer:!0,eventHandlers:r,extraHeaders:t.extraHeaders}):this._sendReinvite({eventHandlers:r,extraHeaders:t.extraHeaders}),!0}},{key:"renegotiate",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0;w.debug("renegotiate()");var r=t.rtcOfferConstraints||null;if(this._status!==I.STATUS_WAITING_FOR_ACK&&this._status!==I.STATUS_CONFIRMED)return!1;if(!this._isReadyToReOffer())return!1;var s={succeeded:function(){n&&n()},failed:function(){e.terminate({cause:_.causes.WEBRTC_ERROR,status_code:500,reason_phrase:"Media Renegotiation Failed"})}};return this._setLocalMediaStatus(),t.useUpdate?this._sendUpdate({sdpOffer:!0,eventHandlers:s,rtcOfferConstraints:r,extraHeaders:t.extraHeaders}):this._sendReinvite({eventHandlers:s,rtcOfferConstraints:r,extraHeaders:t.extraHeaders}),!0}},{key:"refer",value:function(e,t){var n=this;w.debug("refer()");var r=e;if(this._status!==I.STATUS_WAITING_FOR_ACK&&this._status!==I.STATUS_CONFIRMED)return!1;if(!(e=this._ua.normalizeTarget(e)))throw new TypeError("Invalid target: ".concat(r));var s=new A(this);s.sendRefer(e,t);var i=s.id;return this._referSubscribers[i]=s,s.on("requestFailed",function(){delete n._referSubscribers[i]}),s.on("accepted",function(){delete n._referSubscribers[i]}),s.on("failed",function(){delete n._referSubscribers[i]}),s}},{key:"sendRequest",value:function(e,t){return w.debug("sendRequest()"),this._dialog.sendRequest(e,t)}},{key:"receiveRequest",value:function(e){var t=this;if(w.debug("receiveRequest()"),e.method===_.CANCEL)this._status!==I.STATUS_WAITING_FOR_ANSWER&&this._status!==I.STATUS_ANSWERED||(this._status=I.STATUS_CANCELED,this._request.reply(487),this._failed("remote",e,_.causes.CANCELED));else switch(e.method){case _.ACK:if(this._status!==I.STATUS_WAITING_FOR_ACK)return;if(this._status=I.STATUS_CONFIRMED,clearTimeout(this._timers.ackTimer),clearTimeout(this._timers.invite2xxTimer),this._late_sdp){if(!e.body){this.terminate({cause:_.causes.MISSING_SDP,status_code:400});break}var n={originator:"remote",type:"answer",sdp:e.body};w.debug('emit "sdp"'),this.emit("sdp",n);var r=new RTCSessionDescription({type:"answer",sdp:n.sdp});this._connectionPromiseQueue=this._connectionPromiseQueue.then(function(){return t._connection.setRemoteDescription(r)}).then(function(){t._is_confirmed||t._confirmed("remote",e)}).catch(function(e){t.terminate({cause:_.causes.BAD_MEDIA_DESCRIPTION,status_code:488}),w.warn('emit "peerconnection:setremotedescriptionfailed" [error:%o]',e),t.emit("peerconnection:setremotedescriptionfailed",e)})}else this._is_confirmed||this._confirmed("remote",e);break;case _.BYE:this._status===I.STATUS_CONFIRMED||this._status===I.STATUS_WAITING_FOR_ACK?(e.reply(200),this._ended("remote",e,_.causes.BYE)):this._status===I.STATUS_INVITE_RECEIVED||this._status===I.STATUS_WAITING_FOR_ANSWER?(e.reply(200),this._request.reply(487,"BYE Received"),this._ended("remote",e,_.causes.BYE)):e.reply(403,"Wrong Status");break;case _.INVITE:this._status===I.STATUS_CONFIRMED?e.hasHeader("replaces")?this._receiveReplaces(e):this._receiveReinvite(e):e.reply(403,"Wrong Status");break;case _.INFO:if(this._status===I.STATUS_1XX_RECEIVED||this._status===I.STATUS_WAITING_FOR_ANSWER||this._status===I.STATUS_ANSWERED||this._status===I.STATUS_WAITING_FOR_ACK||this._status===I.STATUS_CONFIRMED){var s=e.hasHeader("Content-Type")?e.getHeader("Content-Type").toLowerCase():void 0;s&&s.match(/^application\/dtmf-relay/i)?new b(this).init_incoming(e):void 0!==s?new S(this).init_incoming(e):e.reply(415)}else e.reply(403,"Wrong Status");break;case _.UPDATE:this._status===I.STATUS_CONFIRMED?this._receiveUpdate(e):e.reply(403,"Wrong Status");break;case _.REFER:this._status===I.STATUS_CONFIRMED?this._receiveRefer(e):e.reply(403,"Wrong Status");break;case _.NOTIFY:this._status===I.STATUS_CONFIRMED?this._receiveNotify(e):e.reply(403,"Wrong Status");break;default:e.reply(501)}}},{key:"onTransportError",value:function(){w.warn("onTransportError()"),this._status!==I.STATUS_TERMINATED&&this.terminate({status_code:500,reason_phrase:_.causes.CONNECTION_ERROR,cause:_.causes.CONNECTION_ERROR})}},{key:"onRequestTimeout",value:function(){w.warn("onRequestTimeout()"),this._status!==I.STATUS_TERMINATED&&this.terminate({status_code:408,reason_phrase:_.causes.REQUEST_TIMEOUT,cause:_.causes.REQUEST_TIMEOUT})}},{key:"onDialogError",value:function(){w.warn("onDialogError()"),this._status!==I.STATUS_TERMINATED&&this.terminate({status_code:500,reason_phrase:_.causes.DIALOG_ERROR,cause:_.causes.DIALOG_ERROR})}},{key:"newDTMF",value:function(e){w.debug("newDTMF()"),this.emit("newDTMF",e)}},{key:"newInfo",value:function(e){w.debug("newInfo()"),this.emit("newInfo",e)}},{key:"_isReadyToReOffer",value:function(){return this._rtcReady?this._dialog?!0!==this._dialog.uac_pending_reply&&!0!==this._dialog.uas_pending_reply||(w.debug("_isReadyToReOffer() | there is another INVITE/UPDATE transaction in progress"),!1):(w.debug("_isReadyToReOffer() | session not established yet"),!1):(w.debug("_isReadyToReOffer() | internal WebRTC status not ready"),!1)}},{key:"_close",value:function(){if(w.debug("close()"),this._localMediaStream&&this._localMediaStreamLocallyGenerated&&(w.debug("close() | closing local MediaStream"),v.closeMediaStream(this._localMediaStream)),this._status!==I.STATUS_TERMINATED){if(this._status=I.STATUS_TERMINATED,this._connection)try{this._connection.close()}catch(e){w.warn("close() | error closing the RTCPeerConnection: %o",e)}for(var e in this._timers)Object.prototype.hasOwnProperty.call(this._timers,e)&&clearTimeout(this._timers[e]);for(var t in clearTimeout(this._sessionTimers.timer),this._dialog&&(this._dialog.terminate(),delete this._dialog),this._earlyDialogs)Object.prototype.hasOwnProperty.call(this._earlyDialogs,t)&&(this._earlyDialogs[t].terminate(),delete this._earlyDialogs[t]);for(var n in this._referSubscribers)Object.prototype.hasOwnProperty.call(this._referSubscribers,n)&&delete this._referSubscribers[n];this._ua.destroyRTCSession(this)}}},{key:"_setInvite2xxTimer",value:function(e,t){var n=g.T1;this._timers.invite2xxTimer=setTimeout(function r(){this._status===I.STATUS_WAITING_FOR_ACK&&(e.reply(200,null,["Contact: ".concat(this._contact)],t),ng.T2&&(n=g.T2),this._timers.invite2xxTimer=setTimeout(r.bind(this),n))}.bind(this),n)}},{key:"_setACKTimer",value:function(){var e=this;this._timers.ackTimer=setTimeout(function(){e._status===I.STATUS_WAITING_FOR_ACK&&(w.debug("no ACK received, terminating the session"),clearTimeout(e._timers.invite2xxTimer),e.sendRequest(_.BYE),e._ended("remote",null,_.causes.NO_ACK))},g.TIMER_H)}},{key:"_createRTCConnection",value:function(e,t){var n=this;this._connection=new RTCPeerConnection(e,t),this._connection.addEventListener("iceconnectionstatechange",function(){"failed"===n._connection.iceConnectionState&&n.terminate({cause:_.causes.RTP_TIMEOUT,status_code:408,reason_phrase:_.causes.RTP_TIMEOUT})}),w.debug('emit "peerconnection"'),this.emit("peerconnection",{peerconnection:this._connection})}},{key:"_createLocalDescription",value:function(e,t){var n=this;if(w.debug("createLocalDescription()"),"offer"!==e&&"answer"!==e)throw new Error('createLocalDescription() | invalid type "'.concat(e,'"'));var r=this._connection;return this._rtcReady=!1,Promise.resolve().then(function(){return"offer"===e?r.createOffer(t).catch(function(e){return w.warn('emit "peerconnection:createofferfailed" [error:%o]',e),n.emit("peerconnection:createofferfailed",e),Promise.reject(e)}):r.createAnswer(t).catch(function(e){return w.warn('emit "peerconnection:createanswerfailed" [error:%o]',e),n.emit("peerconnection:createanswerfailed",e),Promise.reject(e)})}).then(function(e){return r.setLocalDescription(e).catch(function(e){return n._rtcReady=!0,w.warn('emit "peerconnection:setlocaldescriptionfailed" [error:%o]',e),n.emit("peerconnection:setlocaldescriptionfailed",e),Promise.reject(e)})}).then(function(){var s=t&&t.iceRestart;if("complete"===r.iceGatheringState&&!s||"gathering"===r.iceGatheringState&&n._iceReady){n._rtcReady=!0;var i={originator:"local",type:e,sdp:r.localDescription.sdp};return w.debug('emit "sdp"'),n.emit("sdp",i),Promise.resolve(i.sdp)}return new Promise(function(t){var s,i,o=!1;n._iceReady=!1;var l=function(){if(!o){r.removeEventListener("icecandidate",s),r.removeEventListener("icegatheringstatechange",i),o=!0,n._rtcReady=!0,n._iceReady=!0;var l={originator:"local",type:e,sdp:r.localDescription.sdp};w.debug('emit "sdp"'),n.emit("sdp",l),t(l.sdp)}};r.addEventListener("icecandidate",s=function(e){var t=e.candidate;t?n.emit("icecandidate",{candidate:t,ready:l}):l()}),r.addEventListener("icegatheringstatechange",i=function(){"complete"===r.iceGatheringState&&l()})})})}},{key:"_createDialog",value:function(e,t,n){var r="UAS"===t?e.to_tag:e.from_tag,s="UAS"===t?e.from_tag:e.to_tag,i=e.call_id+r+s,o=this._earlyDialogs[i];if(n)return!!o||((o=new T(this,e,t,T.C.STATUS_EARLY)).error?(w.debug(o.error),this._failed("remote",e,_.causes.INTERNAL_ERROR),!1):(this._earlyDialogs[i]=o,!0));if(this._from_tag=e.from_tag,this._to_tag=e.to_tag,o)return o.update(e,t),this._dialog=o,delete this._earlyDialogs[i],!0;var l=new T(this,e,t);return l.error?(w.debug(l.error),this._failed("remote",e,_.causes.INTERNAL_ERROR),!1):(this._dialog=l,!0)}},{key:"_receiveReinvite",value:function(e){var t=this;w.debug("receiveReinvite()");var n=e.hasHeader("Content-Type")?e.getHeader("Content-Type").toLowerCase():void 0,r={request:e,callback:void 0,reject:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};s=!0;var n=t.status_code||403,r=t.reason_phrase||"",i=v.cloneArray(t.extraHeaders);if(this._status!==I.STATUS_CONFIRMED)return!1;if(n<300||n>=700)throw new TypeError("Invalid status_code: ".concat(n));e.reply(n,r,i)}.bind(this)},s=!1;if(this.emit("reinvite",r),!s){if(this._late_sdp=!1,!e.body)return this._late_sdp=!0,this._remoteHold&&(this._remoteHold=!1,this._onunhold("remote")),void(this._connectionPromiseQueue=this._connectionPromiseQueue.then(function(){return t._createLocalDescription("offer",t._rtcOfferConstraints)}).then(function(e){i.call(t,e)}).catch(function(){e.reply(500)}));if("application/sdp"!==n)return w.debug("invalid Content-Type"),void e.reply(415);this._processInDialogSdpOffer(e).then(function(e){t._status!==I.STATUS_TERMINATED&&i.call(t,e)}).catch(function(e){w.warn(e)})}function i(t){var n=this,s=["Contact: ".concat(this._contact)];this._handleSessionTimersInIncomingRequest(e,s),this._late_sdp&&(t=this._mangleOffer(t)),e.reply(200,null,s,t,function(){n._status=I.STATUS_WAITING_FOR_ACK,n._setInvite2xxTimer(e,t),n._setACKTimer()}),"function"==typeof r.callback&&r.callback()}}},{key:"_receiveUpdate",value:function(e){var t=this;w.debug("receiveUpdate()");var n=e.hasHeader("Content-Type")?e.getHeader("Content-Type").toLowerCase():void 0,r={request:e,callback:void 0,reject:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};s=!0;var n=t.status_code||403,r=t.reason_phrase||"",i=v.cloneArray(t.extraHeaders);if(this._status!==I.STATUS_CONFIRMED)return!1;if(n<300||n>=700)throw new TypeError("Invalid status_code: ".concat(n));e.reply(n,r,i)}.bind(this)},s=!1;if(this.emit("update",r),!s)if(e.body){if("application/sdp"!==n)return w.debug("invalid Content-Type"),void e.reply(415);this._processInDialogSdpOffer(e).then(function(e){t._status!==I.STATUS_TERMINATED&&i.call(t,e)}).catch(function(e){w.warn(e)})}else i.call(this,null);function i(t){var n=["Contact: ".concat(this._contact)];this._handleSessionTimersInIncomingRequest(e,n),e.reply(200,null,n,t),"function"==typeof r.callback&&r.callback()}}},{key:"_processInDialogSdpOffer",value:function(e){var t=this;w.debug("_processInDialogSdpOffer()");var n,r=e.parseSDP(),i=!1,o=s(r.media);try{for(o.s();!(n=o.n()).done;){var l=n.value;if(-1!==O.indexOf(l.type)){var u=l.direction||r.direction||"sendrecv";if("sendonly"!==u&&"inactive"!==u){i=!1;break}i=!0}}}catch(e){o.e(e)}finally{o.f()}var a={originator:"remote",type:"offer",sdp:e.body};w.debug('emit "sdp"'),this.emit("sdp",a);var c=new RTCSessionDescription({type:"offer",sdp:a.sdp});return this._connectionPromiseQueue=this._connectionPromiseQueue.then(function(){if(t._status===I.STATUS_TERMINATED)throw new Error("terminated");return t._connection.setRemoteDescription(c).catch(function(n){throw e.reply(488),w.warn('emit "peerconnection:setremotedescriptionfailed" [error:%o]',n),t.emit("peerconnection:setremotedescriptionfailed",n),n})}).then(function(){if(t._status===I.STATUS_TERMINATED)throw new Error("terminated");!0===t._remoteHold&&!1===i?(t._remoteHold=!1,t._onunhold("remote")):!1===t._remoteHold&&!0===i&&(t._remoteHold=!0,t._onhold("remote"))}).then(function(){if(t._status===I.STATUS_TERMINATED)throw new Error("terminated");return t._createLocalDescription("answer",t._rtcAnswerConstraints).catch(function(t){throw e.reply(500),w.warn('emit "peerconnection:createtelocaldescriptionfailed" [error:%o]',t),t})}).catch(function(e){w.warn("_processInDialogSdpOffer() failed [error: %o]",e)}),this._connectionPromiseQueue}},{key:"_receiveRefer",value:function(e){var t=this;if(w.debug("receiveRefer()"),!e.refer_to)return w.debug("no Refer-To header field present in REFER"),void e.reply(400);if(e.refer_to.uri.scheme!==_.SIP)return w.debug("Refer-To header field points to a non-SIP URI scheme"),void e.reply(416);e.reply(202);var r=new E(this,e.cseq);w.debug('emit "refer"'),this.emit("refer",{request:e,accept:function(s,i){(function(t){var s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(t="function"==typeof t?t:null,this._status!==I.STATUS_WAITING_FOR_ACK&&this._status!==I.STATUS_CONFIRMED)return!1;var i=new n(this._ua);if(i.on("progress",function(e){var t=e.response;r.notify(t.status_code,t.reason_phrase)}),i.on("accepted",function(e){var t=e.response;r.notify(t.status_code,t.reason_phrase)}),i.on("_failed",function(e){var t=e.message,n=e.cause;t?r.notify(t.status_code,t.reason_phrase):r.notify(487,n)}),e.refer_to.uri.hasHeader("replaces")){var o=decodeURIComponent(e.refer_to.uri.getHeader("replaces"));s.extraHeaders=v.cloneArray(s.extraHeaders),s.extraHeaders.push("Replaces: ".concat(o))}i.connect(e.refer_to.uri.toAor(),s,t)}).call(t,s,i)},reject:function(){(function(){r.notify(603)}).call(t)}})}},{key:"_receiveNotify",value:function(e){switch(w.debug("receiveNotify()"),e.event||e.reply(400),e.event.event){case"refer":var t,n;if(e.event.params&&e.event.params.id)t=e.event.params.id,n=this._referSubscribers[t];else{if(1!==Object.keys(this._referSubscribers).length)return void e.reply(400,"Missing event id parameter");n=this._referSubscribers[Object.keys(this._referSubscribers)[0]]}if(!n)return void e.reply(481,"Subscription does not exist");n.receiveNotify(e),e.reply(200);break;default:e.reply(489)}}},{key:"_receiveReplaces",value:function(e){var t=this;w.debug("receiveReplaces()"),this.emit("replaces",{request:e,accept:function(r){(function(t){var r=this;if(this._status!==I.STATUS_WAITING_FOR_ACK&&this._status!==I.STATUS_CONFIRMED)return!1;var s=new n(this._ua);s.on("confirmed",function(){r.terminate()}),s.init_incoming(e,t)}).call(t,r)},reject:function(){(function(){w.debug("Replaced INVITE rejected by the user"),e.reply(486)}).call(t)}})}},{key:"_sendInitialRequest",value:function(e,t,n){var r=this,s=new C(this._ua,this._request,{onRequestTimeout:function(){r.onRequestTimeout()},onTransportError:function(){r.onTransportError()},onAuthenticated:function(e){r._request=e},onReceiveResponse:function(e){r._receiveInviteResponse(e)}});Promise.resolve().then(function(){return n||(e.audio||e.video?(r._localMediaStreamLocallyGenerated=!0,navigator.mediaDevices.getUserMedia(e).catch(function(e){if(r._status===I.STATUS_TERMINATED)throw new Error("terminated");throw r._failed("local",null,_.causes.USER_DENIED_MEDIA_ACCESS),w.warn('emit "getusermediafailed" [error:%o]',e),r.emit("getusermediafailed",e),e})):void 0)}).then(function(e){if(r._status===I.STATUS_TERMINATED)throw new Error("terminated");return r._localMediaStream=e,e&&e.getTracks().forEach(function(t){r._connection.addTrack(t,e)}),r._connecting(r._request),r._createLocalDescription("offer",t).catch(function(e){throw r._failed("local",null,_.causes.WEBRTC_ERROR),e})}).then(function(e){if(r._is_canceled||r._status===I.STATUS_TERMINATED)throw new Error("terminated");r._request.body=e,r._status=I.STATUS_INVITE_SENT,w.debug('emit "sending" [request:%o]',r._request),r.emit("sending",{request:r._request}),s.send()}).catch(function(e){r._status!==I.STATUS_TERMINATED&&w.warn(e)})}},{key:"_getDTMFRTPSender",value:function(){var e=this._connection.getSenders().find(function(e){return e.track&&"audio"===e.track.kind});if(e&&e.dtmf)return e.dtmf;w.warn("sendDTMF() | no local audio track to send DTMF with")}},{key:"_receiveInviteResponse",value:function(e){var t=this;if(w.debug("receiveInviteResponse()"),this._dialog&&e.status_code>=200&&e.status_code<=299){if(this._dialog.id.call_id===e.call_id&&this._dialog.id.local_tag===e.from_tag&&this._dialog.id.remote_tag===e.to_tag)return void this.sendRequest(_.ACK);var n=new T(this,e,"UAC");return void 0!==n.error?void w.debug(n.error):(this.sendRequest(_.ACK),void this.sendRequest(_.BYE))}if(this._is_canceled)e.status_code>=100&&e.status_code<200?this._request.cancel(this._cancel_reason):e.status_code>=200&&e.status_code<299&&this._acceptAndTerminate(e);else if(this._status===I.STATUS_INVITE_SENT||this._status===I.STATUS_1XX_RECEIVED)switch(!0){case/^100$/.test(e.status_code):this._status=I.STATUS_1XX_RECEIVED;break;case/^1[0-9]{2}$/.test(e.status_code):if(!e.to_tag){w.debug("1xx response received without to tag");break}if(e.hasHeader("contact")&&!this._createDialog(e,"UAC",!0))break;if(this._status=I.STATUS_1XX_RECEIVED,!e.body){this._progress("remote",e);break}var r={originator:"remote",type:"answer",sdp:e.body};w.debug('emit "sdp"'),this.emit("sdp",r);var s=new RTCSessionDescription({type:"answer",sdp:r.sdp});this._connectionPromiseQueue=this._connectionPromiseQueue.then(function(){return t._connection.setRemoteDescription(s)}).then(function(){return t._progress("remote",e)}).catch(function(e){w.warn('emit "peerconnection:setremotedescriptionfailed" [error:%o]',e),t.emit("peerconnection:setremotedescriptionfailed",e)});break;case/^2[0-9]{2}$/.test(e.status_code):if(this._status=I.STATUS_CONFIRMED,!e.body){this._acceptAndTerminate(e,400,_.causes.MISSING_SDP),this._failed("remote",e,_.causes.BAD_MEDIA_DESCRIPTION);break}if(!this._createDialog(e,"UAC"))break;var i={originator:"remote",type:"answer",sdp:e.body};w.debug('emit "sdp"'),this.emit("sdp",i);var o=new RTCSessionDescription({type:"answer",sdp:i.sdp});this._connectionPromiseQueue=this._connectionPromiseQueue.then(function(){if("stable"===t._connection.signalingState)return t._connection.createOffer(t._rtcOfferConstraints).then(function(e){return t._connection.setLocalDescription(e)}).catch(function(n){t._acceptAndTerminate(e,500,n.toString()),t._failed("local",e,_.causes.WEBRTC_ERROR)})}).then(function(){t._connection.setRemoteDescription(o).then(function(){t._handleSessionTimersInIncomingResponse(e),t._accepted("remote",e),t.sendRequest(_.ACK),t._confirmed("local",null)}).catch(function(n){t._acceptAndTerminate(e,488,"Not Acceptable Here"),t._failed("remote",e,_.causes.BAD_MEDIA_DESCRIPTION),w.warn('emit "peerconnection:setremotedescriptionfailed" [error:%o]',n),t.emit("peerconnection:setremotedescriptionfailed",n)})});break;default:var l=v.sipErrorCause(e.status_code);this._failed("remote",e,l)}}},{key:"_sendReinvite",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};w.debug("sendReinvite()");var n=v.cloneArray(t.extraHeaders),r=v.cloneObject(t.eventHandlers),s=t.rtcOfferConstraints||this._rtcOfferConstraints||null,i=!1;function o(e){r.failed&&r.failed(e)}n.push("Contact: ".concat(this._contact)),n.push("Content-Type: application/sdp"),this._sessionTimers.running&&n.push("Session-Expires: ".concat(this._sessionTimers.currentExpires,";refresher=").concat(this._sessionTimers.refresher?"uac":"uas")),this._connectionPromiseQueue=this._connectionPromiseQueue.then(function(){return e._createLocalDescription("offer",s)}).then(function(t){var s={originator:"local",type:"offer",sdp:t=e._mangleOffer(t)};w.debug('emit "sdp"'),e.emit("sdp",s),e.sendRequest(_.INVITE,{extraHeaders:n,body:t,eventHandlers:{onSuccessResponse:function(t){(function(e){var t=this;if(this._status===I.STATUS_TERMINATED)return;if(this.sendRequest(_.ACK),i)return;if(this._handleSessionTimersInIncomingResponse(e),!e.body)return void o.call(this);if(!e.hasHeader("Content-Type")||"application/sdp"!==e.getHeader("Content-Type").toLowerCase())return void o.call(this);var n={originator:"remote",type:"answer",sdp:e.body};w.debug('emit "sdp"'),this.emit("sdp",n);var s=new RTCSessionDescription({type:"answer",sdp:n.sdp});this._connectionPromiseQueue=this._connectionPromiseQueue.then(function(){return t._connection.setRemoteDescription(s)}).then(function(){r.succeeded&&r.succeeded(e)}).catch(function(e){o.call(t),w.warn('emit "peerconnection:setremotedescriptionfailed" [error:%o]',e),t.emit("peerconnection:setremotedescriptionfailed",e)})}).call(e,t),i=!0},onErrorResponse:function(t){o.call(e,t)},onTransportError:function(){e.onTransportError()},onRequestTimeout:function(){e.onRequestTimeout()},onDialogError:function(){e.onDialogError()}}})}).catch(function(){o()})}},{key:"_sendUpdate",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};w.debug("sendUpdate()");var n=v.cloneArray(t.extraHeaders),r=v.cloneObject(t.eventHandlers),s=t.rtcOfferConstraints||this._rtcOfferConstraints||null,i=t.sdpOffer||!1,o=!1;function l(e){var t=this;if(this._status!==I.STATUS_TERMINATED&&!o)if(this._handleSessionTimersInIncomingResponse(e),i){if(!e.body)return void u.call(this);if(!e.hasHeader("Content-Type")||"application/sdp"!==e.getHeader("Content-Type").toLowerCase())return void u.call(this);var n={originator:"remote",type:"answer",sdp:e.body};w.debug('emit "sdp"'),this.emit("sdp",n);var s=new RTCSessionDescription({type:"answer",sdp:n.sdp});this._connectionPromiseQueue=this._connectionPromiseQueue.then(function(){return t._connection.setRemoteDescription(s)}).then(function(){r.succeeded&&r.succeeded(e)}).catch(function(e){u.call(t),w.warn('emit "peerconnection:setremotedescriptionfailed" [error:%o]',e),t.emit("peerconnection:setremotedescriptionfailed",e)})}else r.succeeded&&r.succeeded(e)}function u(e){r.failed&&r.failed(e)}n.push("Contact: ".concat(this._contact)),this._sessionTimers.running&&n.push("Session-Expires: ".concat(this._sessionTimers.currentExpires,";refresher=").concat(this._sessionTimers.refresher?"uac":"uas")),i?(n.push("Content-Type: application/sdp"),this._connectionPromiseQueue=this._connectionPromiseQueue.then(function(){return e._createLocalDescription("offer",s)}).then(function(t){var r={originator:"local",type:"offer",sdp:t=e._mangleOffer(t)};w.debug('emit "sdp"'),e.emit("sdp",r),e.sendRequest(_.UPDATE,{extraHeaders:n,body:t,eventHandlers:{onSuccessResponse:function(t){l.call(e,t),o=!0},onErrorResponse:function(t){u.call(e,t)},onTransportError:function(){e.onTransportError()},onRequestTimeout:function(){e.onRequestTimeout()},onDialogError:function(){e.onDialogError()}}})}).catch(function(){u.call(e)})):this.sendRequest(_.UPDATE,{extraHeaders:n,eventHandlers:{onSuccessResponse:function(t){l.call(e,t)},onErrorResponse:function(t){u.call(e,t)},onTransportError:function(){e.onTransportError()},onRequestTimeout:function(){e.onRequestTimeout()},onDialogError:function(){e.onDialogError()}}})}},{key:"_acceptAndTerminate",value:function(e,t,n){w.debug("acceptAndTerminate()");var r=[];t&&(n=n||_.REASON_PHRASE[t]||"",r.push("Reason: SIP ;cause=".concat(t,'; text="').concat(n,'"'))),(this._dialog||this._createDialog(e,"UAC"))&&(this.sendRequest(_.ACK),this.sendRequest(_.BYE,{extraHeaders:r})),this._status=I.STATUS_TERMINATED}},{key:"_mangleOffer",value:function(e){if(!this._localHold&&!this._remoteHold)return e;if(e=d.parse(e),this._localHold&&!this._remoteHold){w.debug("mangleOffer() | me on hold, mangling offer");var t,n=s(e.media);try{for(n.s();!(t=n.n()).done;){var r=t.value;-1!==O.indexOf(r.type)&&(r.direction?"sendrecv"===r.direction?r.direction="sendonly":"recvonly"===r.direction&&(r.direction="inactive"):r.direction="sendonly")}}catch(e){n.e(e)}finally{n.f()}}else if(this._localHold&&this._remoteHold){w.debug("mangleOffer() | both on hold, mangling offer");var i,o=s(e.media);try{for(o.s();!(i=o.n()).done;){var l=i.value;-1!==O.indexOf(l.type)&&(l.direction="inactive")}}catch(e){o.e(e)}finally{o.f()}}else if(this._remoteHold){w.debug("mangleOffer() | remote on hold, mangling offer");var u,a=s(e.media);try{for(a.s();!(u=a.n()).done;){var c=u.value;-1!==O.indexOf(c.type)&&(c.direction?"sendrecv"===c.direction?c.direction="recvonly":"recvonly"===c.direction&&(c.direction="inactive"):c.direction="recvonly")}}catch(e){a.e(e)}finally{a.f()}}return d.write(e)}},{key:"_setLocalMediaStatus",value:function(){var e=!0,t=!0;(this._localHold||this._remoteHold)&&(e=!1,t=!1),this._audioMuted&&(e=!1),this._videoMuted&&(t=!1),this._toggleMuteAudio(!e),this._toggleMuteVideo(!t)}},{key:"_handleSessionTimersInIncomingRequest",value:function(e,t){var n;this._sessionTimers.enabled&&(e.session_expires&&e.session_expires>=_.MIN_SESSION_EXPIRES?(this._sessionTimers.currentExpires=e.session_expires,n=e.session_expires_refresher||"uas"):(this._sessionTimers.currentExpires=this._sessionTimers.defaultExpires,n="uas"),t.push("Session-Expires: ".concat(this._sessionTimers.currentExpires,";refresher=").concat(n)),this._sessionTimers.refresher="uas"===n,this._runSessionTimer())}},{key:"_handleSessionTimersInIncomingResponse",value:function(e){var t;this._sessionTimers.enabled&&(e.session_expires&&e.session_expires>=_.MIN_SESSION_EXPIRES?(this._sessionTimers.currentExpires=e.session_expires,t=e.session_expires_refresher||"uac"):(this._sessionTimers.currentExpires=this._sessionTimers.defaultExpires,t="uac"),this._sessionTimers.refresher="uac"===t,this._runSessionTimer())}},{key:"_runSessionTimer",value:function(){var e=this,t=this._sessionTimers.currentExpires;this._sessionTimers.running=!0,clearTimeout(this._sessionTimers.timer),this._sessionTimers.refresher?this._sessionTimers.timer=setTimeout(function(){e._status!==I.STATUS_TERMINATED&&e._isReadyToReOffer()&&(w.debug("runSessionTimer() | sending session refresh request"),e._sessionTimers.refreshMethod===_.UPDATE?e._sendUpdate():e._sendReinvite())},500*t):this._sessionTimers.timer=setTimeout(function(){e._status!==I.STATUS_TERMINATED&&(w.warn("runSessionTimer() | timer expired, terminating the session"),e.terminate({cause:_.causes.REQUEST_TIMEOUT,status_code:408,reason_phrase:"Session Timer Expired"}))},1100*t)}},{key:"_toggleMuteAudio",value:function(e){var t,n=s(this._connection.getSenders().filter(function(e){return e.track&&"audio"===e.track.kind}));try{for(n.s();!(t=n.n()).done;){t.value.track.enabled=!e}}catch(e){n.e(e)}finally{n.f()}}},{key:"_toggleMuteVideo",value:function(e){var t,n=s(this._connection.getSenders().filter(function(e){return e.track&&"video"===e.track.kind}));try{for(n.s();!(t=n.n()).done;){t.value.track.enabled=!e}}catch(e){n.e(e)}finally{n.f()}}},{key:"_newRTCSession",value:function(e,t){w.debug("newRTCSession()"),this._ua.newRTCSession(this,{originator:e,session:this,request:t})}},{key:"_connecting",value:function(e){w.debug("session connecting"),w.debug('emit "connecting"'),this.emit("connecting",{request:e})}},{key:"_progress",value:function(e,t){w.debug("session progress"),w.debug('emit "progress"'),this.emit("progress",{originator:e,response:t||null})}},{key:"_accepted",value:function(e,t){w.debug("session accepted"),this._start_time=new Date,w.debug('emit "accepted"'),this.emit("accepted",{originator:e,response:t||null})}},{key:"_confirmed",value:function(e,t){w.debug("session confirmed"),this._is_confirmed=!0,w.debug('emit "confirmed"'),this.emit("confirmed",{originator:e,ack:t||null})}},{key:"_ended",value:function(e,t,n){w.debug("session ended"),this._end_time=new Date,this._close(),w.debug('emit "ended"'),this.emit("ended",{originator:e,message:t||null,cause:n})}},{key:"_failed",value:function(e,t,n){w.debug("session failed"),w.debug('emit "_failed"'),this.emit("_failed",{originator:e,message:t||null,cause:n}),this._close(),w.debug('emit "failed"'),this.emit("failed",{originator:e,message:t||null,cause:n})}},{key:"_onhold",value:function(e){w.debug("session onhold"),this._setLocalMediaStatus(),w.debug('emit "hold"'),this.emit("hold",{originator:e})}},{key:"_onunhold",value:function(e){w.debug("session onunhold"),this._setLocalMediaStatus(),w.debug('emit "unhold"'),this.emit("unhold",{originator:e})}},{key:"_onmute",value:function(e){var t=e.audio,n=e.video;w.debug("session onmute"),this._setLocalMediaStatus(),w.debug('emit "muted"'),this.emit("muted",{audio:t,video:n})}},{key:"_onunmute",value:function(e){var t=e.audio,n=e.video;w.debug("session onunmute"),this._setLocalMediaStatus(),w.debug('emit "unmuted"'),this.emit("unmuted",{audio:t,video:n})}},{key:"C",get:function(){return I}},{key:"causes",get:function(){return _.causes}},{key:"id",get:function(){return this._id}},{key:"connection",get:function(){return this._connection}},{key:"contact",get:function(){return this._contact}},{key:"direction",get:function(){return this._direction}},{key:"local_identity",get:function(){return this._local_identity}},{key:"remote_identity",get:function(){return this._remote_identity}},{key:"start_time",get:function(){return this._start_time}},{key:"end_time",get:function(){return this._end_time}},{key:"data",get:function(){return this._data},set:function(e){this._data=e}},{key:"status",get:function(){return this._status}}]),n}()},{"./Constants":2,"./Dialog":3,"./Exceptions":6,"./Logger":9,"./RTCSession/DTMF":15,"./RTCSession/Info":16,"./RTCSession/ReferNotifier":17,"./RTCSession/ReferSubscriber":18,"./RequestSender":20,"./SIPMessage":21,"./Timers":23,"./Transactions":24,"./URI":27,"./Utils":28,events:31,"sdp-transform":37}],15:[function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function s(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{};if(void 0===e)throw new TypeError("Not enough arguments");if(this._direction="outgoing",this._session.status!==this._session.C.STATUS_CONFIRMED&&this._session.status!==this._session.C.STATUS_WAITING_FOR_ACK)throw new h.InvalidStateError(this._session.status);var r=d.cloneArray(n.extraHeaders);if(this.eventHandlers=d.cloneObject(n.eventHandlers),"string"==typeof e)e=e.toUpperCase();else{if("number"!=typeof e)throw new TypeError("Invalid tone: ".concat(e));e=e.toString()}if(!e.match(/^[0-9A-DR#*]$/))throw new TypeError("Invalid tone: ".concat(e));this._tone=e,this._duration=n.duration,r.push("Content-Type: application/dtmf-relay");var s="Signal=".concat(this._tone,"\r\n");s+="Duration=".concat(this._duration),this._session.newDTMF({originator:"local",dtmf:this,request:this._request}),this._session.sendRequest(c.INFO,{extraHeaders:r,eventHandlers:{onSuccessResponse:function(e){t.emit("succeeded",{originator:"remote",response:e})},onErrorResponse:function(e){t.eventHandlers.onFailed&&t.eventHandlers.onFailed(),t.emit("failed",{originator:"remote",response:e})},onRequestTimeout:function(){t._session.onRequestTimeout()},onTransportError:function(){t._session.onTransportError()},onDialogError:function(){t._session.onDialogError()}},body:s})}},{key:"init_incoming",value:function(e){var t=/^(Signal\s*?=\s*?)([0-9A-D#*]{1})(\s)?.*/,n=/^(Duration\s?=\s?)([0-9]{1,4})(\s)?.*/;if(this._direction="incoming",this._request=e,e.reply(200),e.body){var r=e.body.split("\n");r.length>=1&&t.test(r[0])&&(this._tone=r[0].replace(t,"$2")),r.length>=2&&n.test(r[1])&&(this._duration=parseInt(r[1].replace(n,"$2"),10))}this._duration||(this._duration=_.DEFAULT_DURATION),this._tone?this._session.newDTMF({originator:"remote",dtmf:this,request:e}):f.debug("invalid INFO DTMF received, discarded")}},{key:"tone",get:function(){return this._tone}},{key:"duration",get:function(){return this._duration}}])&&s(t.prototype,n),r&&s(t,r),a}(),t.exports.C=_},{"../Constants":2,"../Exceptions":6,"../Logger":9,"../Utils":28,events:31}],16:[function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function s(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{};if(this._direction="outgoing",void 0===e)throw new TypeError("Not enough arguments");if(this._session.status!==this._session.C.STATUS_CONFIRMED&&this._session.status!==this._session.C.STATUS_WAITING_FOR_ACK)throw new c.InvalidStateError(this._session.status);this._contentType=e,this._body=t;var s=h.cloneArray(r.extraHeaders);s.push("Content-Type: ".concat(e)),this._session.newInfo({originator:"local",info:this,request:this.request}),this._session.sendRequest(a.INFO,{extraHeaders:s,eventHandlers:{onSuccessResponse:function(e){n.emit("succeeded",{originator:"remote",response:e})},onErrorResponse:function(e){n.emit("failed",{originator:"remote",response:e})},onTransportError:function(){n._session.onTransportError()},onRequestTimeout:function(){n._session.onRequestTimeout()},onDialogError:function(){n._session.onDialogError()}},body:t})}},{key:"init_incoming",value:function(e){this._direction="incoming",this.request=e,e.reply(200),this._contentType=e.hasHeader("Content-Type")?e.getHeader("Content-Type").toLowerCase():void 0,this._body=e.body,this._session.newInfo({originator:"remote",info:this,request:e})}},{key:"contentType",get:function(){return this._contentType}},{key:"body",get:function(){return this._body}}])&&s(t.prototype,n),r&&s(t,r),d}()},{"../Constants":2,"../Exceptions":6,"../Utils":28,events:31}],17:[function(e,t,n){"use strict";function r(e,t){for(var n=0;n=200?"terminated;reason=noresource":"active;expires=".concat(this._expires),this._session.sendRequest(i.NOTIFY,{extraHeaders:["Event: ".concat(l.event_type,";id=").concat(this._id),"Subscription-State: ".concat(n),"Content-Type: ".concat(l.body_type)],body:"SIP/2.0 ".concat(e," ").concat(t),eventHandlers:{onErrorResponse:function(){this._active=!1}}}))}}])&&r(t.prototype,n),s&&r(t,s),e}()},{"../Constants":2,"../Logger":9}],18:[function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function s(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{};f.debug("sendRefer()");var r=d.cloneArray(n.extraHeaders),s=d.cloneObject(n.eventHandlers);for(var i in s)Object.prototype.hasOwnProperty.call(s,i)&&this.on(i,s[i]);var o=null;n.replaces&&(o=n.replaces._request.call_id,o+=";to-tag=".concat(n.replaces._to_tag),o+=";from-tag=".concat(n.replaces._from_tag),o=encodeURIComponent(o));var l="Refer-To: <".concat(e).concat(o?"?Replaces=".concat(o):"",">");if(r.push(l),!r.some(function(e){return e.toLowerCase().startsWith("referred-by:")})){var u="Referred-By: <".concat(this._session._ua._configuration.uri._scheme,":").concat(this._session._ua._configuration.uri._user,"@").concat(this._session._ua._configuration.uri._host,">");r.push(u)}r.push("Contact: ".concat(this._session.contact));var a=this._session.sendRequest(c.REFER,{extraHeaders:r,eventHandlers:{onSuccessResponse:function(e){t._requestSucceeded(e)},onErrorResponse:function(e){t._requestFailed(e,c.causes.REJECTED)},onTransportError:function(){t._requestFailed(null,c.causes.CONNECTION_ERROR)},onRequestTimeout:function(){t._requestFailed(null,c.causes.REQUEST_TIMEOUT)},onDialogError:function(){t._requestFailed(null,c.causes.DIALOG_ERROR)}}});this._id=a.cseq}},{key:"receiveNotify",value:function(e){if(f.debug("receiveNotify()"),e.body){var t=h.parse(e.body.trim().split("\r\n",1)[0],"Status_Line");if(-1!==t)switch(!0){case/^100$/.test(t.status_code):this.emit("trying",{request:e,status_line:t});break;case/^1[0-9]{2}$/.test(t.status_code):this.emit("progress",{request:e,status_line:t});break;case/^2[0-9]{2}$/.test(t.status_code):this.emit("accepted",{request:e,status_line:t});break;default:this.emit("failed",{request:e,status_line:t})}else f.debug('receiveNotify() | error parsing NOTIFY body: "'.concat(e.body,'"'))}}},{key:"_requestSucceeded",value:function(e){f.debug("REFER succeeded"),f.debug('emit "requestSucceeded"'),this.emit("requestSucceeded",{response:e})}},{key:"_requestFailed",value:function(e,t){f.debug("REFER failed"),f.debug('emit "requestFailed"'),this.emit("requestFailed",{response:e||null,cause:t})}},{key:"id",get:function(){return this._id}}])&&s(t.prototype,n),r&&s(t,r),a}()},{"../Constants":2,"../Grammar":7,"../Logger":9,"../Utils":28,events:31}],19:[function(e,t,n){"use strict";function r(e,t){for(var n=0;n"'),this._contact+=";reg-id=".concat(this._reg_id),this._contact+=";+sip.instance=".concat(this._sipInstance)}var t,n,s;return t=e,(n=[{key:"setExtraHeaders",value:function(e){Array.isArray(e)||(e=[]),this._extraHeaders=e.slice()}},{key:"setExtraContactParams",value:function(e){for(var t in e instanceof Object||(e={}),this._extraContactParams="",e)if(Object.prototype.hasOwnProperty.call(e,t)){var n=e[t];this._extraContactParams+=";".concat(t),n&&(this._extraContactParams+="=".concat(n))}}},{key:"register",value:function(){var e=this;if(this._registering)a.debug("Register request in progress...");else{var t=this._extraHeaders.slice();t.push("Contact: ".concat(this._contact,";expires=").concat(this._expires).concat(this._extraContactParams)),t.push("Expires: ".concat(this._expires));var n=new l.OutgoingRequest(o.REGISTER,this._registrar,this._ua,{to_uri:this._to_uri,call_id:this._call_id,cseq:this._cseq+=1},t),r=new u(this._ua,n,{onRequestTimeout:function(){e._registrationFailure(null,o.causes.REQUEST_TIMEOUT)},onTransportError:function(){e._registrationFailure(null,o.causes.CONNECTION_ERROR)},onAuthenticated:function(){e._cseq+=1},onReceiveResponse:function(t){if(t.cseq===e._cseq)switch(null!==e._registrationTimer&&(clearTimeout(e._registrationTimer),e._registrationTimer=null),!0){case/^1[0-9]{2}$/.test(t.status_code):break;case/^2[0-9]{2}$/.test(t.status_code):if(e._registering=!1,!t.hasHeader("Contact")){a.debug("no Contact header in response to REGISTER, response ignored");break}var n=t.headers.Contact.reduce(function(e,t){return e.concat(t.parsed)},[]),r=n.find(function(t){return e._sipInstance===t.getParam("+sip.instance")&&e._reg_id===parseInt(t.getParam("reg-id"))});if(r||(r=n.find(function(t){return t.uri.user===e._ua.contact.uri.user})),!r){a.debug("no Contact header pointing to us, response ignored");break}var s=r.getParam("expires");!s&&t.hasHeader("expires")&&(s=t.getHeader("expires")),s||(s=e._expires),(s=Number(s))<10&&(s=10);var l=s>64?1e3*s/2+Math.floor(1e3*(s/2-32)*Math.random()):1e3*s-5e3;e._registrationTimer=setTimeout(function(){e._registrationTimer=null,0===e._ua.listeners("registrationExpiring").length?e.register():e._ua.emit("registrationExpiring")},l),r.hasParam("temp-gruu")&&(e._ua.contact.temp_gruu=r.getParam("temp-gruu").replace(/"/g,"")),r.hasParam("pub-gruu")&&(e._ua.contact.pub_gruu=r.getParam("pub-gruu").replace(/"/g,"")),e._registered||(e._registered=!0,e._ua.registered({response:t}));break;case/^423$/.test(t.status_code):t.hasHeader("min-expires")?(e._expires=Number(t.getHeader("min-expires")),e._expires<10&&(e._expires=10),e.register()):(a.debug("423 response received for REGISTER without Min-Expires"),e._registrationFailure(t,o.causes.SIP_FAILURE_CODE));break;default:var u=i.sipErrorCause(t.status_code);e._registrationFailure(t,u)}}});this._registering=!0,r.send()}}},{key:"unregister",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(this._registered){this._registered=!1,null!==this._registrationTimer&&(clearTimeout(this._registrationTimer),this._registrationTimer=null);var n=this._extraHeaders.slice();t.all?n.push("Contact: *".concat(this._extraContactParams)):n.push("Contact: ".concat(this._contact,";expires=0").concat(this._extraContactParams)),n.push("Expires: 0");var r=new l.OutgoingRequest(o.REGISTER,this._registrar,this._ua,{to_uri:this._to_uri,call_id:this._call_id,cseq:this._cseq+=1},n);new u(this._ua,r,{onRequestTimeout:function(){e._unregistered(null,o.causes.REQUEST_TIMEOUT)},onTransportError:function(){e._unregistered(null,o.causes.CONNECTION_ERROR)},onAuthenticated:function(){e._cseq+=1},onReceiveResponse:function(t){switch(!0){case/^1[0-9]{2}$/.test(t.status_code):break;case/^2[0-9]{2}$/.test(t.status_code):e._unregistered(t);break;default:var n=i.sipErrorCause(t.status_code);e._unregistered(t,n)}}}).send()}else a.debug("already unregistered")}},{key:"close",value:function(){this._registered&&this.unregister()}},{key:"onTransportClosed",value:function(){this._registering=!1,null!==this._registrationTimer&&(clearTimeout(this._registrationTimer),this._registrationTimer=null),this._registered&&(this._registered=!1,this._ua.unregistered({}))}},{key:"_registrationFailure",value:function(e,t){this._registering=!1,this._ua.registrationFailed({response:e||null,cause:t}),this._registered&&(this._registered=!1,this._ua.unregistered({response:e||null,cause:t}))}},{key:"_unregistered",value:function(e,t){this._registering=!1,this._registered=!1,this._ua.unregistered({response:e||null,cause:t||null})}},{key:"registered",get:function(){return this._registered}}])&&r(t.prototype,n),s&&r(t,s),e}()},{"./Constants":2,"./Logger":9,"./RequestSender":20,"./SIPMessage":21,"./Utils":28}],20:[function(e,t,n){"use strict";function r(e,t){for(var n=0;n=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:s}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,l=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return o=e.done,e},e:function(e){l=!0,i=e},f:function(){try{o||null==n.return||n.return()}finally{if(l)throw i}}}}function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n")),this.setHeader("via",""),this.setHeader("max-forwards",p.MAX_FORWARDS);var l=s.to_uri||n,u=s.to_tag?{tag:s.to_tag}:null,a=void 0!==s.to_display_name?s.to_display_name:null;this.to=new v(l,a,u),this.setHeader("to",this.to.toString());var h,d=s.from_uri||r.configuration.uri,f={tag:s.from_tag||m.newTag()};h=void 0!==s.from_display_name?s.from_display_name:r.configuration.display_name?r.configuration.display_name:null,this.from=new v(d,h,f),this.setHeader("from",this.from.toString());var _=s.call_id||r.configuration.jssip_id+m.createRandomToken(15);this.call_id=_,this.setHeader("call-id",_);var g=s.cseq||Math.floor(1e4*Math.random());this.cseq=g,this.setHeader("cseq","".concat(g," ").concat(t))}return d(e,[{key:"setHeader",value:function(e,t){for(var n=new RegExp("^\\s*".concat(e,"\\s*:"),"i"),r=0;r1&&void 0!==arguments[1]?arguments[1]:0;if(e=m.headerize(e),this.headers[e]){if(!(t>=this.headers[e].length)){var n=this.headers[e][t],r=n.raw;if(n.parsed)return n.parsed;var s=g.parse(r,e.replace(/-/g,"_"));return-1===s?(this.headers[e].splice(t,1),void y.debug('error parsing "'.concat(e,'" header field with value "').concat(r,'"'))):(n.parsed=s,s)}y.debug('not so many "'.concat(e,'" headers present'))}else y.debug('header "'.concat(e,'" not present'))}},{key:"s",value:function(e,t){return this.parseHeader(e,t)}},{key:"setHeader",value:function(e,t){var n={raw:t};this.headers[m.headerize(e)]=[n]}},{key:"parseSDP",value:function(e){return!e&&this.sdp?this.sdp:(this.sdp=f.parse(this.body||""),this.sdp)}},{key:"toString",value:function(){return this.data}}]),e}(),S=function(e){s(n,b);var t=o(n);function n(e){var r;return c(this,n),(r=t.call(this)).ua=e,r.headers={},r.ruri=null,r.transport=null,r.server_transaction=null,r}return d(n,[{key:"reply",value:function(e,t,n,r,s,i){var o=[],l=this.getHeader("To");if(t=t||null,!(e=e||null)||e<100||e>699)throw new TypeError("Invalid status_code: ".concat(e));if(t&&"string"!=typeof t&&!(t instanceof String))throw new TypeError("Invalid reason_phrase: ".concat(t));t=t||p.REASON_PHRASE[e]||"",n=m.cloneArray(n),this.ua.configuration.extra_headers&&(n=n.concat(this.ua.configuration.extra_headers));var a="SIP/2.0 ".concat(e," ").concat(t,"\r\n");if(this.method===p.INVITE&&e>100&&e<=200){var c,h=u(this.getHeaders("record-route"));try{for(h.s();!(c=h.n()).done;){var d=c.value;a+="Record-Route: ".concat(d,"\r\n")}}catch(e){h.e(e)}finally{h.f()}}var f,_=u(this.getHeaders("via"));try{for(_.s();!(f=_.n()).done;){var v=f.value;a+="Via: ".concat(v,"\r\n")}}catch(e){_.e(e)}finally{_.f()}!this.to_tag&&e>100?l+=";tag=".concat(m.newTag()):this.to_tag&&!this.s("to").hasParam("tag")&&(l+=";tag=".concat(this.to_tag)),a+="To: ".concat(l,"\r\n"),a+="From: ".concat(this.getHeader("From"),"\r\n"),a+="Call-ID: ".concat(this.call_id,"\r\n"),a+="CSeq: ".concat(this.cseq," ").concat(this.method,"\r\n");var g,y=u(n);try{for(y.s();!(g=y.n()).done;){var T=g.value;a+="".concat(T.trim(),"\r\n")}}catch(e){y.e(e)}finally{y.f()}switch(this.method){case p.INVITE:this.ua.configuration.session_timers&&o.push("timer"),(this.ua.contact.pub_gruu||this.ua.contact.temp_gruu)&&o.push("gruu"),o.push("ice","replaces");break;case p.UPDATE:this.ua.configuration.session_timers&&o.push("timer"),r&&o.push("ice"),o.push("replaces")}if(o.push("outbound"),this.method===p.OPTIONS?(a+="Allow: ".concat(p.ALLOWED_METHODS,"\r\n"),a+="Accept: ".concat(p.ACCEPTED_BODY_TYPES,"\r\n")):405===e?a+="Allow: ".concat(p.ALLOWED_METHODS,"\r\n"):415===e&&(a+="Accept: ".concat(p.ACCEPTED_BODY_TYPES,"\r\n")),a+="Supported: ".concat(o,"\r\n"),r){var C=m.str_utf8_length(r);a+="Content-Type: application/sdp\r\n",a+="Content-Length: ".concat(C,"\r\n\r\n"),a+=r}else a+="Content-Length: ".concat(0,"\r\n\r\n");this.server_transaction.receiveResponse(e,a,s,i)}},{key:"reply_sl",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=this.getHeaders("via");if(!e||e<100||e>699)throw new TypeError("Invalid status_code: ".concat(e));if(t&&"string"!=typeof t&&!(t instanceof String))throw new TypeError("Invalid reason_phrase: ".concat(t));t=t||p.REASON_PHRASE[e]||"";var r,s="SIP/2.0 ".concat(e," ").concat(t,"\r\n"),i=u(n);try{for(i.s();!(r=i.n()).done;){var o=r.value;s+="Via: ".concat(o,"\r\n")}}catch(e){i.e(e)}finally{i.f()}var l=this.getHeader("To");if(!this.to_tag&&e>100?l+=";tag=".concat(m.newTag()):this.to_tag&&!this.s("to").hasParam("tag")&&(l+=";tag=".concat(this.to_tag)),s+="To: ".concat(l,"\r\n"),s+="From: ".concat(this.getHeader("From"),"\r\n"),s+="Call-ID: ".concat(this.call_id,"\r\n"),s+="CSeq: ".concat(this.cseq," ").concat(this.method,"\r\n"),this.ua.configuration.extra_headers){var a,c=u(this.ua.configuration.extra_headers);try{for(c.s();!(a=c.n()).done;){var h=a.value;s+="".concat(h.trim(),"\r\n")}}catch(e){c.e(e)}finally{c.f()}}s+="Content-Length: ".concat(0,"\r\n\r\n"),this.transport.send(s)}}]),n}(),E=function(e){s(n,b);var t=o(n);function n(){var e;return c(this,n),(e=t.call(this)).headers={},e.status_code=null,e.reason_phrase=null,e}return n}();t.exports={OutgoingRequest:T,InitialOutgoingInviteRequest:C,IncomingRequest:S,IncomingResponse:E}},{"./Constants":2,"./Grammar":7,"./Logger":9,"./NameAddrHeader":11,"./Utils":28,"sdp-transform":37}],22:[function(e,t,n){"use strict";var r=e("./Logger"),s=e("./Utils"),i=e("./Grammar"),o=new r("Socket");n.isSocket=function(e){if(Array.isArray(e))return!1;if(void 0===e)return o.warn("undefined JsSIP.Socket instance"),!1;try{if(!s.isString(e.url))throw o.warn("missing or invalid JsSIP.Socket url property"),new Error("Missing or invalid JsSIP.Socket url property");if(!s.isString(e.via_transport))throw o.warn("missing or invalid JsSIP.Socket via_transport property"),new Error("Missing or invalid JsSIP.Socket via_transport property");if(-1===i.parse(e.sip_uri,"SIP_URI"))throw o.warn("missing or invalid JsSIP.Socket sip_uri property"),new Error("missing or invalid JsSIP.Socket sip_uri property")}catch(e){return!1}try{["connect","disconnect","send"].forEach(function(t){if(!s.isFunction(e[t]))throw o.warn("missing or invalid JsSIP.Socket method: ".concat(t)),new Error("Missing or invalid JsSIP.Socket method: ".concat(t))})}catch(e){return!1}return!0}},{"./Grammar":7,"./Logger":9,"./Utils":28}],23:[function(e,t,n){"use strict";var r=500;t.exports={T1:r,T2:4e3,T4:5e3,TIMER_B:32e3,TIMER_D:0,TIMER_F:32e3,TIMER_H:32e3,TIMER_I:0,TIMER_J:0,TIMER_K:0,TIMER_L:32e3,TIMER_M:32e3,PROVISIONAL_RESPONSE_INTERVAL:6e4}},{}],24:[function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){for(var n=0;n=100&&n<=199)switch(this.state){case b.STATUS_CALLING:this.stateChanged(b.STATUS_PROCEEDING),this.eventHandlers.onReceiveResponse(e);break;case b.STATUS_PROCEEDING:this.eventHandlers.onReceiveResponse(e)}else if(n>=200&&n<=299)switch(this.state){case b.STATUS_CALLING:case b.STATUS_PROCEEDING:this.stateChanged(b.STATUS_ACCEPTED),this.M=setTimeout(function(){t.timer_M()},m.TIMER_M),this.eventHandlers.onReceiveResponse(e);break;case b.STATUS_ACCEPTED:this.eventHandlers.onReceiveResponse(e)}else if(n>=300&&n<=699)switch(this.state){case b.STATUS_CALLING:case b.STATUS_PROCEEDING:this.stateChanged(b.STATUS_COMPLETED),this.sendACK(e),this.eventHandlers.onReceiveResponse(e);break;case b.STATUS_COMPLETED:this.sendACK(e)}}},{key:"C",get:function(){return b}}]),n}(),A=function(e){l(n,d);var t=a(n);function n(e,r,i,o){var l;s(this,n),(l=t.call(this)).id="z9hG4bK".concat(Math.floor(1e7*Math.random())),l.transport=r,l.request=i,l.eventHandlers=o;var u="SIP/2.0/".concat(r.via_transport);return u+=" ".concat(e.configuration.via_host,";branch=").concat(l.id),l.request.setHeader("via",u),l}return o(n,[{key:"send",value:function(){this.transport.send(this.request)||this.onTransportError()}},{key:"onTransportError",value:function(){y.debug("transport error occurred for transaction ".concat(this.id)),this.eventHandlers.onTransportError()}},{key:"C",get:function(){return b}}]),n}(),R=function(e){l(n,d);var t=a(n);function n(e,r,i){var o;return s(this,n),(o=t.call(this)).type=b.NON_INVITE_SERVER,o.id=i.via_branch,o.ua=e,o.transport=r,o.request=i,o.last_response="",i.server_transaction=c(o),o.state=b.STATUS_TRYING,e.newTransaction(c(o)),o}return o(n,[{key:"stateChanged",value:function(e){this.state=e,this.emit("stateChanged")}},{key:"timer_J",value:function(){T.debug("Timer J expired for transaction ".concat(this.id)),this.stateChanged(b.STATUS_TERMINATED),this.ua.destroyTransaction(this)}},{key:"onTransportError",value:function(){this.transportError||(this.transportError=!0,T.debug("transport error occurred, deleting transaction ".concat(this.id)),clearTimeout(this.J),this.stateChanged(b.STATUS_TERMINATED),this.ua.destroyTransaction(this))}},{key:"receiveResponse",value:function(e,t,n,r){var s=this;if(100===e)switch(this.state){case b.STATUS_TRYING:this.stateChanged(b.STATUS_PROCEEDING),this.transport.send(t)||this.onTransportError();break;case b.STATUS_PROCEEDING:this.last_response=t,this.transport.send(t)?n&&n():(this.onTransportError(),r&&r())}else if(e>=200&&e<=699)switch(this.state){case b.STATUS_TRYING:case b.STATUS_PROCEEDING:this.stateChanged(b.STATUS_COMPLETED),this.last_response=t,this.J=setTimeout(function(){s.timer_J()},m.TIMER_J),this.transport.send(t)?n&&n():(this.onTransportError(),r&&r());break;case b.STATUS_COMPLETED:}}},{key:"C",get:function(){return b}}]),n}(),w=function(e){l(n,d);var t=a(n);function n(e,r,i){var o;return s(this,n),(o=t.call(this)).type=b.INVITE_SERVER,o.id=i.via_branch,o.ua=e,o.transport=r,o.request=i,o.last_response="",i.server_transaction=c(o),o.state=b.STATUS_PROCEEDING,e.newTransaction(c(o)),o.resendProvisionalTimer=null,i.reply(100),o}return o(n,[{key:"stateChanged",value:function(e){this.state=e,this.emit("stateChanged")}},{key:"timer_H",value:function(){C.debug("Timer H expired for transaction ".concat(this.id)),this.state===b.STATUS_COMPLETED&&C.debug("ACK not received, dialog will be terminated"),this.stateChanged(b.STATUS_TERMINATED),this.ua.destroyTransaction(this)}},{key:"timer_I",value:function(){this.stateChanged(b.STATUS_TERMINATED),this.ua.destroyTransaction(this)}},{key:"timer_L",value:function(){C.debug("Timer L expired for transaction ".concat(this.id)),this.state===b.STATUS_ACCEPTED&&(this.stateChanged(b.STATUS_TERMINATED),this.ua.destroyTransaction(this))}},{key:"onTransportError",value:function(){this.transportError||(this.transportError=!0,C.debug("transport error occurred, deleting transaction ".concat(this.id)),null!==this.resendProvisionalTimer&&(clearInterval(this.resendProvisionalTimer),this.resendProvisionalTimer=null),clearTimeout(this.L),clearTimeout(this.H),clearTimeout(this.I),this.stateChanged(b.STATUS_TERMINATED),this.ua.destroyTransaction(this))}},{key:"resend_provisional",value:function(){this.transport.send(this.last_response)||this.onTransportError()}},{key:"receiveResponse",value:function(e,t,n,r){var s=this;if(e>=100&&e<=199)switch(this.state){case b.STATUS_PROCEEDING:this.transport.send(t)||this.onTransportError(),this.last_response=t}if(e>100&&e<=199&&this.state===b.STATUS_PROCEEDING)null===this.resendProvisionalTimer&&(this.resendProvisionalTimer=setInterval(function(){s.resend_provisional()},m.PROVISIONAL_RESPONSE_INTERVAL));else if(e>=200&&e<=299)switch(this.state){case b.STATUS_PROCEEDING:this.stateChanged(b.STATUS_ACCEPTED),this.last_response=t,this.L=setTimeout(function(){s.timer_L()},m.TIMER_L),null!==this.resendProvisionalTimer&&(clearInterval(this.resendProvisionalTimer),this.resendProvisionalTimer=null);case b.STATUS_ACCEPTED:this.transport.send(t)?n&&n():(this.onTransportError(),r&&r())}else if(e>=300&&e<=699)switch(this.state){case b.STATUS_PROCEEDING:null!==this.resendProvisionalTimer&&(clearInterval(this.resendProvisionalTimer),this.resendProvisionalTimer=null),this.transport.send(t)?(this.stateChanged(b.STATUS_COMPLETED),this.H=setTimeout(function(){s.timer_H()},m.TIMER_H),n&&n()):(this.onTransportError(),r&&r())}}},{key:"C",get:function(){return b}}]),n}();t.exports={C:b,NonInviteClientTransaction:S,InviteClientTransaction:E,AckClientTransaction:A,NonInviteServerTransaction:R,InviteServerTransaction:w,checkTransaction:function(e,t){var n,r=e._transactions;switch(t.method){case _.INVITE:if(n=r.ist[t.via_branch]){switch(n.state){case b.STATUS_PROCEEDING:n.transport.send(n.last_response);break;case b.STATUS_ACCEPTED:}return!0}break;case _.ACK:if(!(n=r.ist[t.via_branch]))return!1;if(n.state===b.STATUS_ACCEPTED)return!1;if(n.state===b.STATUS_COMPLETED)return n.state=b.STATUS_CONFIRMED,n.I=setTimeout(function(){n.timer_I()},m.TIMER_I),!0;break;case _.CANCEL:return(n=r.ist[t.via_branch])?(t.reply_sl(200),n.state!==b.STATUS_PROCEEDING):(t.reply_sl(481),!0);default:if(n=r.nist[t.via_branch]){switch(n.state){case b.STATUS_TRYING:break;case b.STATUS_PROCEEDING:case b.STATUS_COMPLETED:n.transport.send(n.last_response)}return!0}}}}},{"./Constants":2,"./Logger":9,"./SIPMessage":21,"./Timers":23,events:31}],25:[function(e,t,n){"use strict";function r(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:u.recovery_options;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),l.debug("new()"),this.status=u.STATUS_DISCONNECTED,this.socket=null,this.sockets=[],this.recovery_options=n,this.recover_attempts=0,this.recovery_timer=null,this.close_requested=!1;try{this.textDecoder=new TextDecoder("utf8")}catch(e){l.warn("cannot use TextDecoder: ".concat(e))}if(void 0===t)throw new TypeError("Invalid argument. undefined 'sockets' argument");t instanceof Array||(t=[t]),t.forEach(function(e){if(!i.isSocket(e.socket))throw new TypeError("Invalid argument. invalid 'JsSIP.Socket' instance");if(e.weight&&!Number(e.weight))throw new TypeError("Invalid argument. 'weight' attribute is not a number");this.sockets.push({socket:e.socket,weight:e.weight||0,status:u.SOCKET_STATUS_READY})},this),this._getSocket()}var t,n,s;return t=e,(n=[{key:"connect",value:function(){l.debug("connect()"),this.isConnected()?l.debug("Transport is already connected"):this.isConnecting()?l.debug("Transport is connecting"):(this.close_requested=!1,this.status=u.STATUS_CONNECTING,this.onconnecting({socket:this.socket,attempts:this.recover_attempts}),this.close_requested||(this.socket.onconnect=this._onConnect.bind(this),this.socket.ondisconnect=this._onDisconnect.bind(this),this.socket.ondata=this._onData.bind(this),this.socket.connect()))}},{key:"disconnect",value:function(){l.debug("close()"),this.close_requested=!0,this.recover_attempts=0,this.status=u.STATUS_DISCONNECTED,null!==this.recovery_timer&&(clearTimeout(this.recovery_timer),this.recovery_timer=null),this.socket.onconnect=function(){},this.socket.ondisconnect=function(){},this.socket.ondata=function(){},this.socket.disconnect(),this.ondisconnect({socket:this.socket,error:!1})}},{key:"send",value:function(e){if(l.debug("send()"),!this.isConnected())return l.warn("unable to send message, transport is not connected"),!1;var t=e.toString();return l.debug("sending message:\n\n".concat(t,"\n")),this.socket.send(t)}},{key:"isConnected",value:function(){return this.status===u.STATUS_CONNECTED}},{key:"isConnecting",value:function(){return this.status===u.STATUS_CONNECTING}},{key:"_reconnect",value:function(){var e=this;this.recover_attempts+=1;var t=Math.floor(Math.random()*Math.pow(2,this.recover_attempts)+1);tthis.recovery_options.max_interval&&(t=this.recovery_options.max_interval),l.debug("reconnection attempt: ".concat(this.recover_attempts,". next connection attempt in ").concat(t," seconds")),this.recovery_timer=setTimeout(function(){e.close_requested||e.isConnected()||e.isConnecting()||(e._getSocket(),e.connect())},1e3*t)}},{key:"_getSocket",value:function(){var e=[];if(this.sockets.forEach(function(t){t.status!==u.SOCKET_STATUS_ERROR&&(0===e.length?e.push(t):t.weight>e[0].weight?e=[t]:t.weight===e[0].weight&&e.push(t))}),0===e.length)return this.sockets.forEach(function(e){e.status=u.SOCKET_STATUS_READY}),void this._getSocket();var t=Math.floor(Math.random()*e.length);this.socket=e[t].socket}},{key:"_onConnect",value:function(){this.recover_attempts=0,this.status=u.STATUS_CONNECTED,null!==this.recovery_timer&&(clearTimeout(this.recovery_timer),this.recovery_timer=null),this.onconnect({socket:this})}},{key:"_onDisconnect",value:function(e,t,n){this.status=u.STATUS_DISCONNECTED,this.ondisconnect({socket:this.socket,error:e,code:t,reason:n}),this.close_requested||(this.sockets.forEach(function(e){this.socket===e.socket&&(e.status=u.SOCKET_STATUS_ERROR)},this),this._reconnect(e))}},{key:"_onData",value:function(e){if("\r\n\r\n"!==e)if("\r\n"!==e){if("string"!=typeof e){try{e=this.textDecoder?this.textDecoder.decode(e):String.fromCharCode.apply(null,new Uint8Array(e))}catch(e){return void l.debug("received binary message failed to be converted into string, message discarded")}l.debug("received binary message:\n\n".concat(e,"\n"))}else l.debug("received text message:\n\n".concat(e,"\n"));this.ondata({transport:this,message:e})}else l.debug("received message with CRLF Keep Alive response");else{l.debug("received message with double-CRLF Keep Alive request");try{this.socket.send("\r\n")}catch(e){l.warn("error sending Keep Alive response: ".concat(e))}}}},{key:"via_transport",get:function(){return this.socket.via_transport}},{key:"url",get:function(){return this.socket.url}},{key:"sip_uri",get:function(){return this.socket.sip_uri}}])&&r(t.prototype,n),s&&r(t,s),e}()},{"./Constants":2,"./Logger":9,"./Socket":22}],26:[function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function s(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{},t=e.anonymous||null,n=e.outbound||null,r="<";return r+=t?this.temp_gruu||"sip:anonymous@anonymous.invalid;transport=ws":this.pub_gruu||this.uri.toString(),!n||(t?this.temp_gruu:this.pub_gruu)||(r+=";ob"),r+=">"}};var r=["authorization_user","password","realm","ha1","authorization_jwt","display_name","register","extra_headers"];for(var s in this._configuration)Object.prototype.hasOwnProperty.call(this._configuration,s)&&(-1!==r.indexOf(s)?Object.defineProperty(this._configuration,s,{writable:!0,configurable:!1}):Object.defineProperty(this._configuration,s,{writable:!1,configurable:!1}));for(var i in R.debug("configuration parameters after validation:"),this._configuration)if(Object.prototype.hasOwnProperty.call(A.settings,i))switch(i){case"uri":case"registrar_server":R.debug("- ".concat(i,": ").concat(this._configuration[i]));break;case"password":case"ha1":case"authorization_jwt":R.debug("- ".concat(i,": NOT SHOWN"));break;default:R.debug("- ".concat(i,": ").concat(JSON.stringify(this._configuration[i])))}}},{key:"C",get:function(){return w}},{key:"status",get:function(){return this._status}},{key:"contact",get:function(){return this._contact}},{key:"configuration",get:function(){return this._configuration}},{key:"transport",get:function(){return this._transport}}]),n}()},{"./Config":1,"./Constants":2,"./Exceptions":6,"./Logger":9,"./Message":10,"./Options":12,"./Parser":13,"./RTCSession":14,"./Registrator":19,"./SIPMessage":21,"./Transactions":24,"./Transport":25,"./URI":27,"./Utils":28,"./sanityCheck":30,events:31}],27:[function(e,t,n){"use strict";function r(e,t){var n;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return s(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return s(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,l=!0,u=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return l=e.done,e},e:function(e){u=!0,o=e},f:function(){try{l||null==n.return||n.return()}finally{if(u)throw o}}}}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n4&&void 0!==arguments[4]?arguments[4]:{},o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),!r)throw new TypeError('missing or invalid "host" parameter');for(var u in this._parameters={},this._headers={},this._scheme=t||l.SIP,this._user=n,this._host=r,this._port=s,i)Object.prototype.hasOwnProperty.call(i,u)&&this.setParam(u,i[u]);for(var a in o)Object.prototype.hasOwnProperty.call(o,a)&&this.setHeader(a,o[a])}return o(e,null,[{key:"parse",value:function(e){return-1!==(e=a.parse(e,"SIP_URI"))?e:void 0}}]),o(e,[{key:"setParam",value:function(e,t){e&&(this._parameters[e.toLowerCase()]=null==t?null:t.toString())}},{key:"getParam",value:function(e){if(e)return this._parameters[e.toLowerCase()]}},{key:"hasParam",value:function(e){if(e)return!!this._parameters.hasOwnProperty(e.toLowerCase())}},{key:"deleteParam",value:function(e){if(e=e.toLowerCase(),this._parameters.hasOwnProperty(e)){var t=this._parameters[e];return delete this._parameters[e],t}}},{key:"clearParams",value:function(){this._parameters={}}},{key:"setHeader",value:function(e,t){this._headers[u.headerize(e)]=Array.isArray(t)?t:[t]}},{key:"getHeader",value:function(e){if(e)return this._headers[u.headerize(e)]}},{key:"hasHeader",value:function(e){if(e)return!!this._headers.hasOwnProperty(u.headerize(e))}},{key:"deleteHeader",value:function(e){if(e=u.headerize(e),this._headers.hasOwnProperty(e)){var t=this._headers[e];return delete this._headers[e],t}}},{key:"clearHeaders",value:function(){this._headers={}}},{key:"clone",value:function(){return new e(this._scheme,this._user,this._host,this._port,JSON.parse(JSON.stringify(this._parameters)),JSON.parse(JSON.stringify(this._headers)))}},{key:"toString",value:function(){var e=[],t="".concat(this._scheme,":");for(var n in this._user&&(t+="".concat(u.escapeUser(this._user),"@")),t+=this._host,(this._port||0===this._port)&&(t+=":".concat(this._port)),this._parameters)Object.prototype.hasOwnProperty.call(this._parameters,n)&&(t+=";".concat(n),null!==this._parameters[n]&&(t+="=".concat(this._parameters[n])));for(var s in this._headers)if(Object.prototype.hasOwnProperty.call(this._headers,s)){var i,o=r(this._headers[s]);try{for(o.s();!(i=o.n()).done;){var l=i.value;e.push("".concat(s,"=").concat(l))}}catch(e){o.e(e)}finally{o.f()}}return e.length>0&&(t+="?".concat(e.join("&"))),t}},{key:"toAor",value:function(e){var t="".concat(this._scheme,":");return this._user&&(t+="".concat(u.escapeUser(this._user),"@")),t+=this._host,e&&(this._port||0===this._port)&&(t+=":".concat(this._port)),t}},{key:"scheme",get:function(){return this._scheme},set:function(e){this._scheme=e.toLowerCase()}},{key:"user",get:function(){return this._user},set:function(e){this._user=e}},{key:"host",get:function(){return this._host},set:function(e){this._host=e.toLowerCase()}},{key:"port",get:function(){return this._port},set:function(e){this._port=0===e?e:parseInt(e,10)||null}}]),e}()},{"./Constants":2,"./Grammar":7,"./Utils":28}],28:[function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function s(e,t){var n;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return i(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return i(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,s=function(){};return{s:s,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:s}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,l=!0,u=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return l=e.done,e},e:function(e){u=!0,o=e},f:function(){try{l||null==n.return||n.return()}finally{if(u)throw o}}}}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1?t-1:0),r=1;r1&&void 0!==arguments[1]?arguments[1]:32,r="";for(t=0;t>>32-t}function n(e,t){var n=2147483648&e,r=2147483648&t,s=1073741824&e,i=1073741824&t,o=(1073741823&e)+(1073741823&t);return s&i?2147483648^o^n^r:s|i?1073741824&o?3221225472^o^n^r:1073741824^o^n^r:o^n^r}function r(e,r,s,i,o,l,u){return e=n(e,n(n(function(e,t,n){return e&t|~e&n}(r,s,i),o),u)),n(t(e,l),r)}function s(e,r,s,i,o,l,u){return e=n(e,n(n(function(e,t,n){return e&n|t&~n}(r,s,i),o),u)),n(t(e,l),r)}function i(e,r,s,i,o,l,u){return e=n(e,n(n(function(e,t,n){return e^t^n}(r,s,i),o),u)),n(t(e,l),r)}function o(e,r,s,i,o,l,u){return e=n(e,n(n(function(e,t,n){return t^(e|~n)}(r,s,i),o),u)),n(t(e,l),r)}function l(e){var t,n="",r="";for(t=0;t<=3;t++)n+=(r="0".concat((e>>>8*t&255).toString(16))).substr(r.length-2,2);return n}var u,a,c,h,d,f,_,p,m,v;for(u=function(e){for(var t,n=e.length,r=n+8,s=16*((r-r%64)/64+1),i=new Array(s-1),o=0,l=0;l>>29,i}(e=function(e){for(var t="",n=0;n127&&r<2048?(t+=String.fromCharCode(r>>6|192),t+=String.fromCharCode(63&r|128)):(t+=String.fromCharCode(r>>12|224),t+=String.fromCharCode(r>>6&63|128),t+=String.fromCharCode(63&r|128))}return t}(e)),_=1732584193,p=4023233417,m=2562383102,v=271733878,a=0;a1&&void 0!==arguments[1]?arguments[1]:{};return e&&Object.assign({},e)||t}},{"./Constants":2,"./Grammar":7,"./URI":27}],29:[function(e,t,n){"use strict";function r(e,t){for(var n=0;n=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,l=!0,u=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return l=e.done,e},e:function(e){u=!0,o=e},f:function(){try{l||null==n.return||n.return()}finally{if(u)throw o}}}}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1)return d.debug("more than one Via header field present in the response, dropping the response"),!1},function(){var e=h.str_utf8_length(i.body),t=i.getHeader("content-length");if(e0&&l.length>i){l.warned=!0;var u=new Error("Possible EventEmitter memory leak detected. "+l.length+' "'+String(t)+'" listeners added. Use emitter.setMaxListeners() to increase limit.');u.name="MaxListenersExceededWarning",u.emitter=e,u.type=t,u.count=l.length,"object"==typeof console&&console.warn&&console.warn("%s: %s",u.name,u.message)}}else l=o[t]=n,++e._eventsCount;return e}function d(){if(!this.fired)switch(this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length){case 0:return this.listener.call(this.target);case 1:return this.listener.call(this.target,arguments[0]);case 2:return this.listener.call(this.target,arguments[0],arguments[1]);case 3:return this.listener.call(this.target,arguments[0],arguments[1],arguments[2]);default:for(var e=new Array(arguments.length),t=0;t1&&(t=arguments[1]),t instanceof Error)throw t;var u=new Error('Unhandled "error" event. ('+t+")");throw u.context=t,u}if(!(n=o[e]))return!1;var a="function"==typeof n;switch(r=arguments.length){case 1:!function(e,t,n){if(t)e.call(n);else for(var r=e.length,s=m(e,r),i=0;i=0;o--)if(n[o]===t||n[o].listener===t){l=n[o].listener,i=o;break}if(i<0)return this;0===i?n.shift():function(e,t){for(var n=t,r=n+1,s=e.length;r=0;i--)this.removeListener(e,t[i]);return this},o.prototype.listeners=function(e){return _(this,e,!0)},o.prototype.rawListeners=function(e){return _(this,e,!1)},o.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):p.call(e,t)},o.prototype.listenerCount=p,o.prototype.eventNames=function(){return this._eventsCount>0?Reflect.ownKeys(this._events):[]}},{}],32:[function(e,t,n){(function(r){n.log=function(...e){return"object"==typeof console&&console.log&&console.log(...e)},n.formatArgs=function(e){if(e[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+e[0]+(this.useColors?"%c ":" ")+"+"+t.exports.humanize(this.diff),!this.useColors)return;const n="color: "+this.color;e.splice(1,0,n,"color: inherit");let r=0,s=0;e[0].replace(/%[a-zA-Z%]/g,e=>{"%%"!==e&&(r++,"%c"===e&&(s=r))}),e.splice(s,0,n)},n.save=function(e){try{e?n.storage.setItem("debug",e):n.storage.removeItem("debug")}catch(e){}},n.load=function(){let e;try{e=n.storage.getItem("debug")}catch(e){}!e&&void 0!==r&&"env"in r&&(e=r.env.DEBUG);return e},n.useColors=function(){if("undefined"!=typeof window&&window.process&&("renderer"===window.process.type||window.process.__nwjs))return!0;if("undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;return"undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)},n.storage=function(){try{return localStorage}catch(e){}}(),n.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],t.exports=e("./common")(n);const{formatters:s}=t.exports;s.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}}).call(this,e("_process"))},{"./common":33,_process:35}],33:[function(e,t,n){t.exports=function(t){function n(e){let t=0;for(let n=0;n{if("%%"===t)return t;l++;const i=r.formatters[s];if("function"==typeof i){const r=e[l];t=i.call(n,r),e.splice(l,1),l--}return t}),r.formatArgs.call(n,e),(n.log||r.log).apply(n,e)}return o.namespace=e,o.enabled=r.enabled(e),o.useColors=r.useColors(),o.color=n(e),o.destroy=s,o.extend=i,"function"==typeof r.init&&r.init(o),r.instances.push(o),o}function s(){const e=r.instances.indexOf(this);return-1!==e&&(r.instances.splice(e,1),!0)}function i(e,t){const n=r(this.namespace+(void 0===t?":":t)+e);return n.log=this.log,n}function o(e){return e.toString().substring(2,e.toString().length-2).replace(/\.\*\?$/,"*")}return r.debug=r,r.default=r,r.coerce=function(e){return e instanceof Error?e.stack||e.message:e},r.disable=function(){const e=[...r.names.map(o),...r.skips.map(o).map(e=>"-"+e)].join(",");return r.enable(""),e},r.enable=function(e){let t;r.save(e),r.names=[],r.skips=[];const n=("string"==typeof e?e:"").split(/[\s,]+/),s=n.length;for(t=0;t{r[e]=t[e]}),r.instances=[],r.names=[],r.skips=[],r.formatters={},r.selectColor=n,r.enable(r.load()),r}},{ms:34}],34:[function(e,t,n){var r=1e3,s=60*r,i=60*s,o=24*i,l=7*o,u=365.25*o;function a(e,t,n,r){var s=t>=1.5*n;return Math.round(e/n)+" "+r+(s?"s":"")}t.exports=function(e,t){t=t||{};var n=typeof e;if("string"===n&&e.length>0)return function(e){if((e=String(e)).length>100)return;var t=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(!t)return;var n=parseFloat(t[1]);switch((t[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return n*u;case"weeks":case"week":case"w":return n*l;case"days":case"day":case"d":return n*o;case"hours":case"hour":case"hrs":case"hr":case"h":return n*i;case"minutes":case"minute":case"mins":case"min":case"m":return n*s;case"seconds":case"second":case"secs":case"sec":case"s":return n*r;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return n;default:return}}(e);if("number"===n&&isFinite(e))return t.long?function(e){var t=Math.abs(e);if(t>=o)return a(e,t,o,"day");if(t>=i)return a(e,t,i,"hour");if(t>=s)return a(e,t,s,"minute");if(t>=r)return a(e,t,r,"second");return e+" ms"}(e):function(e){var t=Math.abs(e);if(t>=o)return Math.round(e/o)+"d";if(t>=i)return Math.round(e/i)+"h";if(t>=s)return Math.round(e/s)+"m";if(t>=r)return Math.round(e/r)+"s";return e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},{}],35:[function(e,t,n){var r,s,i=t.exports={};function o(){throw new Error("setTimeout has not been defined")}function l(){throw new Error("clearTimeout has not been defined")}function u(e){if(r===setTimeout)return setTimeout(e,0);if((r===o||!r)&&setTimeout)return r=setTimeout,setTimeout(e,0);try{return r(e,0)}catch(t){try{return r.call(null,e,0)}catch(t){return r.call(this,e,0)}}}!function(){try{r="function"==typeof setTimeout?setTimeout:o}catch(e){r=o}try{s="function"==typeof clearTimeout?clearTimeout:l}catch(e){s=l}}();var a,c=[],h=!1,d=-1;function f(){h&&a&&(h=!1,a.length?c=a.concat(c):d=-1,c.length&&_())}function _(){if(!h){var e=u(f);h=!0;for(var t=c.length;t;){for(a=c,c=[];++d1)for(var n=1;n1&&(e[n[0]]=void 0),e};n.parseParams=function(e){return e.split(/;\s?/).reduce(l,{})},n.parseFmtpConfig=n.parseParams,n.parsePayloads=function(e){return e.toString().split(" ").map(Number)},n.parseRemoteCandidates=function(e){for(var t=[],n=e.split(" ").map(r),s=0;s=r)return e;var s=n[t];switch(t+=1,e){case"%%":return"%";case"%s":return String(s);case"%d":return Number(s);case"%v":return""}})}.apply(null,r)},o=["v","o","s","i","u","e","p","c","b","t","r","z","a"],l=["i","c","b","a"];t.exports=function(e,t){t=t||{},null==e.version&&(e.version=0),null==e.name&&(e.name=" "),e.media.forEach(function(e){null==e.payloads&&(e.payloads="")});var n=t.outerOrder||o,s=t.innerOrder||l,u=[];return n.forEach(function(t){r[t].forEach(function(n){n.name in e&&null!=e[n.name]?u.push(i(t,n,e)):n.push in e&&null!=e[n.push]&&e[n.push].forEach(function(e){u.push(i(t,n,e))})})}),e.media.forEach(function(e){u.push(i("m",r.m[0],e)),s.forEach(function(t){r[t].forEach(function(n){n.name in e&&null!=e[n.name]?u.push(i(t,n,e)):n.push in e&&null!=e[n.push]&&e[n.push].forEach(function(e){u.push(i(t,n,e))})})})}),u.join("\r\n")+"\r\n"}},{"./grammar":36}],40:[function(e,t,n){t.exports={name:"jssip",title:"JsSIP",description:"the Javascript SIP library",version:"3.10.1",homepage:"https://jssip.net",contributors:["José Luis Millán (https://github.com/jmillan)","Iñaki Baz Castillo (https://inakibaz.me)"],types:"lib/JsSIP.d.ts",main:"lib-es5/JsSIP.js",keywords:["sip","websocket","webrtc","node","browser","library"],license:"MIT",repository:{type:"git",url:"https://github.com/versatica/JsSIP.git"},bugs:{url:"https://github.com/versatica/JsSIP/issues"},dependencies:{"@types/events":"^3.0.0","@types/debug":"^4.1.7",debug:"^4.3.1",events:"^3.3.0","sdp-transform":"^2.14.1"},devDependencies:{"@babel/core":"^7.19.6","@babel/preset-env":"^7.19.4","ansi-colors":"^3.2.4",browserify:"^16.5.1",eslint:"^5.16.0","fancy-log":"^1.3.3",gulp:"^4.0.2","gulp-babel":"^8.0.0","gulp-eslint":"^5.0.0","gulp-expect-file":"^1.0.2","gulp-header":"^2.0.9","gulp-nodeunit-runner":"^0.2.2","gulp-plumber":"^1.2.1","gulp-rename":"^1.4.0","gulp-uglify-es":"^1.0.4",pegjs:"^0.7.0","vinyl-buffer":"^1.0.1","vinyl-source-stream":"^2.0.0"},scripts:{lint:"node npm-scripts.js lint",test:"node npm-scripts.js test",prepublish:"node npm-scripts.js prepublish",release:"node npm-scripts.js release"}}},{}]},{},[8])(8)}); \ No newline at end of file +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).JsSIP=e()}}(function(){return function(){return function e(t,n,r){function i(s,l){if(!n[s]){if(!t[s]){var u="function"==typeof require&&require;if(!l&&u)return u(s,!0);if(o)return o(s,!0);var a=new Error("Cannot find module '"+s+"'");throw a.code="MODULE_NOT_FOUND",a}var c=n[s]={exports:{}};t[s][0].call(c.exports,function(e){return i(t[s][1][e]||e)},c,c.exports,e,t,n,r)}return n[s].exports}for(var o="function"==typeof require&&require,s=0;s=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var s,l=!0,u=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return l=e.done,e},e:function(e){u=!0,s=e},f:function(){try{l||null==n.return||n.return()}finally{if(u)throw s}}}}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n0)return t}},connection_recovery_min_interval:function(e){if(o.isDecimal(e)){var t=Number(e);if(t>0)return t}},contact_uri:function(e){if("string"==typeof e){var t=l.parse(e,"SIP_URI");if(-1!==t)return t}},display_name:function(e){return e},instance_id:function(e){return/^uuid:/i.test(e)&&(e=e.substr(5)),-1===l.parse(e,"uuid")?void 0:e},no_answer_timeout:function(e){if(o.isDecimal(e)){var t=Number(e);if(t>0)return t}},session_timers:function(e){if("boolean"==typeof e)return e},session_timers_refresh_method:function(e){if("string"==typeof e&&((e=e.toUpperCase())===s.INVITE||e===s.UPDATE))return e},session_timers_force_refresher:function(e){if("boolean"==typeof e)return e},password:function(e){return String(e)},realm:function(e){return String(e)},ha1:function(e){return String(e)},register:function(e){if("boolean"==typeof e)return e},register_expires:function(e){if(o.isDecimal(e)){var t=Number(e);if(t>0)return t}},register_from_tag_trail:function(e){return"function"==typeof e?e:String(e)},registrar_server:function(e){/^sip:/i.test(e)||(e="".concat(s.SIP,":").concat(e));var t=u.parse(e);return t?t.user?void 0:t:void 0},use_preloaded_route:function(e){if("boolean"==typeof e)return e},extra_headers:function(e){var t=[];if(Array.isArray(e)&&e.length){var n,i=r(e);try{for(i.s();!(n=i.n()).done;){var o=n.value;"string"==typeof o&&t.push(o)}}catch(e){i.e(e)}finally{i.f()}return t}}}};n.load=function(e,t){for(var n in f.mandatory){if(!t.hasOwnProperty(n))throw new c.ConfigurationError(n);var r=t[n],i=f.mandatory[n](r);if(void 0===i)throw new c.ConfigurationError(n,r);e[n]=i}for(var s in f.optional)if(t.hasOwnProperty(s)){var l=t[s];if(o.isEmpty(l))continue;var u=f.optional[s](l);if(void 0===u)throw new c.ConfigurationError(s,l);e[s]=u}}},{"./Constants":2,"./Exceptions":6,"./Grammar":7,"./Socket":22,"./URI":27,"./Utils":28}],2:[function(e,t,n){"use strict";var r=e("../package.json");t.exports={USER_AGENT:"".concat(r.title," ").concat(r.version),SIP:"sip",SIPS:"sips",causes:{CONNECTION_ERROR:"Connection Error",REQUEST_TIMEOUT:"Request Timeout",SIP_FAILURE_CODE:"SIP Failure Code",INTERNAL_ERROR:"Internal Error",BUSY:"Busy",REJECTED:"Rejected",REDIRECTED:"Redirected",UNAVAILABLE:"Unavailable",NOT_FOUND:"Not Found",ADDRESS_INCOMPLETE:"Address Incomplete",INCOMPATIBLE_SDP:"Incompatible SDP",MISSING_SDP:"Missing SDP",AUTHENTICATION_ERROR:"Authentication Error",BYE:"Terminated",WEBRTC_ERROR:"WebRTC Error",CANCELED:"Canceled",NO_ANSWER:"No Answer",EXPIRES:"Expires",NO_ACK:"No ACK",DIALOG_ERROR:"Dialog Error",USER_DENIED_MEDIA_ACCESS:"User Denied Media Access",BAD_MEDIA_DESCRIPTION:"Bad Media Description",RTP_TIMEOUT:"RTP Timeout"},SIP_ERROR_CAUSES:{REDIRECTED:[300,301,302,305,380],BUSY:[486,600],REJECTED:[403,603],NOT_FOUND:[404,604],UNAVAILABLE:[480,410,408,430],ADDRESS_INCOMPLETE:[484,424],INCOMPATIBLE_SDP:[488,606],AUTHENTICATION_ERROR:[401,407]},ACK:"ACK",BYE:"BYE",CANCEL:"CANCEL",INFO:"INFO",INVITE:"INVITE",MESSAGE:"MESSAGE",NOTIFY:"NOTIFY",OPTIONS:"OPTIONS",REGISTER:"REGISTER",REFER:"REFER",UPDATE:"UPDATE",SUBSCRIBE:"SUBSCRIBE",DTMF_TRANSPORT:{INFO:"INFO",RFC2833:"RFC2833"},REASON_PHRASE:{100:"Trying",180:"Ringing",181:"Call Is Being Forwarded",182:"Queued",183:"Session Progress",199:"Early Dialog Terminated",200:"OK",202:"Accepted",204:"No Notification",300:"Multiple Choices",301:"Moved Permanently",302:"Moved Temporarily",305:"Use Proxy",380:"Alternative Service",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",410:"Gone",412:"Conditional Request Failed",413:"Request Entity Too Large",414:"Request-URI Too Long",415:"Unsupported Media Type",416:"Unsupported URI Scheme",417:"Unknown Resource-Priority",420:"Bad Extension",421:"Extension Required",422:"Session Interval Too Small",423:"Interval Too Brief",424:"Bad Location Information",428:"Use Identity Header",429:"Provide Referrer Identity",430:"Flow Failed",433:"Anonymity Disallowed",436:"Bad Identity-Info",437:"Unsupported Certificate",438:"Invalid Identity Header",439:"First Hop Lacks Outbound Support",440:"Max-Breadth Exceeded",469:"Bad Info Package",470:"Consent Needed",478:"Unresolvable Destination",480:"Temporarily Unavailable",481:"Call/Transaction Does Not Exist",482:"Loop Detected",483:"Too Many Hops",484:"Address Incomplete",485:"Ambiguous",486:"Busy Here",487:"Request Terminated",488:"Not Acceptable Here",489:"Bad Event",491:"Request Pending",493:"Undecipherable",494:"Security Agreement Required",500:"JsSIP Internal Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Server Time-out",505:"Version Not Supported",513:"Message Too Large",580:"Precondition Failure",600:"Busy Everywhere",603:"Decline",604:"Does Not Exist Anywhere",606:"Not Acceptable"},ALLOWED_METHODS:"INVITE,ACK,CANCEL,BYE,UPDATE,MESSAGE,OPTIONS,REFER,INFO,NOTIFY",ACCEPTED_BODY_TYPES:"application/sdp, application/dtmf-relay",MAX_FORWARDS:69,SESSION_EXPIRES:90,MIN_SESSION_EXPIRES:60,CONNECTION_RECOVERY_MAX_INTERVAL:30,CONNECTION_RECOVERY_MIN_INTERVAL:2}},{"../package.json":40}],3:[function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:d.STATUS_CONFIRMED;if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._owner=t,this._ua=t._ua,this._uac_pending_reply=!1,this._uas_pending_reply=!1,!n.hasHeader("contact"))return{error:"unable to create a Dialog without Contact header field"};n instanceof l.IncomingResponse&&(i=n.status_code<200?d.STATUS_EARLY:d.STATUS_CONFIRMED);var o=n.parseHeader("contact");"UAS"===r?(this._id={call_id:n.call_id,local_tag:n.to_tag,remote_tag:n.from_tag,toString:function(){return this.call_id+this.local_tag+this.remote_tag}},this._state=i,this._remote_seqnum=n.cseq,this._local_uri=n.parseHeader("to").uri,this._remote_uri=n.parseHeader("from").uri,this._remote_target=o.uri,this._route_set=n.getHeaders("record-route"),this._ack_seqnum=this._remote_seqnum):"UAC"===r&&(this._id={call_id:n.call_id,local_tag:n.from_tag,remote_tag:n.to_tag,toString:function(){return this.call_id+this.local_tag+this.remote_tag}},this._state=i,this._local_seqnum=n.cseq,this._local_uri=n.parseHeader("from").uri,this._remote_uri=n.parseHeader("to").uri,this._remote_target=o.uri,this._route_set=n.getHeaders("record-route").reverse(),this._ack_seqnum=null),this._ua.newDialog(this),h.debug("new ".concat(r," dialog created with status ").concat(this._state===d.STATUS_EARLY?"EARLY":"CONFIRMED"))},n=[{key:"C",get:function(){return d}}],(t=[{key:"id",get:function(){return this._id}},{key:"local_seqnum",get:function(){return this._local_seqnum},set:function(e){this._local_seqnum=e}},{key:"owner",get:function(){return this._owner}},{key:"uac_pending_reply",get:function(){return this._uac_pending_reply},set:function(e){this._uac_pending_reply=e}},{key:"uas_pending_reply",get:function(){return this._uas_pending_reply}},{key:"isTerminated",value:function(){return this._status===d.STATUS_TERMINATED}},{key:"update",value:function(e,t){this._state=d.STATUS_CONFIRMED,h.debug("dialog ".concat(this._id.toString()," changed to CONFIRMED state")),"UAC"===t&&(this._route_set=e.getHeaders("record-route").reverse())}},{key:"terminate",value:function(){h.debug("dialog ".concat(this._id.toString()," deleted")),this._ua.destroyDialog(this),this._state=d.STATUS_TERMINATED}},{key:"sendRequest",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=f.cloneArray(n.extraHeaders),i=f.cloneObject(n.eventHandlers),o=n.body||null,s=this._createRequest(e,r,o);return i.onAuthenticated=function(){t._local_seqnum+=1},new c(this,s,i).send(),s}},{key:"receiveRequest",value:function(e){this._checkInDialogRequest(e)&&(e.method===u.ACK&&null!==this._ack_seqnum?this._ack_seqnum=null:e.method===u.INVITE&&(this._ack_seqnum=e.cseq),this._owner.receiveRequest(e))}},{key:"_createRequest",value:function(e,t,n){t=f.cloneArray(t),this._local_seqnum||(this._local_seqnum=Math.floor(1e4*Math.random()));var r=e===u.CANCEL||e===u.ACK?this._local_seqnum:this._local_seqnum+=1;return new l.OutgoingRequest(e,this._remote_target,this._ua,{cseq:r,call_id:this._id.call_id,from_uri:this._local_uri,from_tag:this._id.local_tag,to_uri:this._remote_uri,to_tag:this._id.remote_tag,route_set:this._route_set},t,n)}},{key:"_checkInDialogRequest",value:function(e){var t=this;if(this._remote_seqnum)if(e.cseqthis._remote_seqnum&&(this._remote_seqnum=e.cseq);else this._remote_seqnum=e.cseq;if(e.method===u.INVITE||e.method===u.UPDATE&&e.body){if(!0===this._uac_pending_reply)e.reply(491);else{if(!0===this._uas_pending_reply){var n=1+(10*Math.random()|0);return e.reply(500,null,["Retry-After:".concat(n)]),!1}this._uas_pending_reply=!0;e.server_transaction.on("stateChanged",function n(){e.server_transaction.state!==a.C.STATUS_ACCEPTED&&e.server_transaction.state!==a.C.STATUS_COMPLETED&&e.server_transaction.state!==a.C.STATUS_TERMINATED||(e.server_transaction.removeListener("stateChanged",n),t._uas_pending_reply=!1)})}e.hasHeader("contact")&&e.server_transaction.on("stateChanged",function(){e.server_transaction.state===a.C.STATUS_ACCEPTED&&(t._remote_target=e.parseHeader("contact").uri)})}else e.method===u.NOTIFY&&e.hasHeader("contact")&&e.server_transaction.on("stateChanged",function(){e.server_transaction.state===a.C.STATUS_COMPLETED&&(t._remote_target=e.parseHeader("contact").uri)});return!0}}])&&i(e.prototype,t),n&&i(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,n}()},{"./Constants":2,"./Dialog/RequestSender":4,"./Logger":9,"./SIPMessage":21,"./Transactions":24,"./Utils":28}],4:[function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t){for(var n=0;n=200&&e.status_code<300?this._eventHandlers.onSuccessResponse(e):e.status_code>=300&&this._eventHandlers.onErrorResponse(e):(this._request.cseq=this._dialog.local_seqnum+=1,this._reattemptTimer=setTimeout(function(){t._dialog.isTerminated()||(t._reattempt=!0,t.send())},1e3)):e.status_code>=200&&e.status_code<300?this._eventHandlers.onSuccessResponse(e):e.status_code>=300&&this._eventHandlers.onErrorResponse(e)}}])&&i(e.prototype,t),n&&i(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,n}()},{"../Constants":2,"../RequestSender":20,"../Transactions":24}],5:[function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:null;if(this._algorithm=t.algorithm,this._realm=t.realm,this._nonce=t.nonce,this._opaque=t.opaque,this._stale=t.stale,this._algorithm){if("MD5"!==this._algorithm)return u.warn('authenticate() | challenge with Digest algorithm different than "MD5", authentication aborted'),!1}else this._algorithm="MD5";if(!this._nonce)return u.warn("authenticate() | challenge without Digest nonce, authentication aborted"),!1;if(!this._realm)return u.warn("authenticate() | challenge without Digest realm, authentication aborted"),!1;if(!this._credentials.password){if(!this._credentials.ha1)return u.warn("authenticate() | no plain SIP password nor ha1 provided, authentication aborted"),!1;if(this._credentials.realm!==this._realm)return u.warn('authenticate() | no plain SIP password, and stored `realm` does not match the given `realm`, cannot authenticate [stored:"%s", given:"%s"]',this._credentials.realm,this._realm),!1}if(t.qop)if(t.qop.indexOf("auth-int")>-1)this._qop="auth-int";else{if(!(t.qop.indexOf("auth")>-1))return u.warn('authenticate() | challenge without Digest qop different than "auth" or "auth-int", authentication aborted'),!1;this._qop="auth"}else this._qop=null;this._method=n,this._uri=r,this._cnonce=o||l.createRandomToken(12),this._nc+=1;var s,a,c=Number(this._nc).toString(16);return this._ncHex="00000000".substr(0,8-c.length)+c,4294967296===this._nc&&(this._nc=1,this._ncHex="00000001"),this._credentials.password?this._ha1=l.calculateMD5("".concat(this._credentials.username,":").concat(this._realm,":").concat(this._credentials.password)):this._ha1=this._credentials.ha1,"auth"===this._qop?(s="".concat(this._method,":").concat(this._uri),a=l.calculateMD5(s),u.debug('authenticate() | using qop=auth [a2:"%s"]',s),this._response=l.calculateMD5("".concat(this._ha1,":").concat(this._nonce,":").concat(this._ncHex,":").concat(this._cnonce,":auth:").concat(a))):"auth-int"===this._qop?(s="".concat(this._method,":").concat(this._uri,":").concat(l.calculateMD5(i||"")),a=l.calculateMD5(s),u.debug('authenticate() | using qop=auth-int [a2:"%s"]',s),this._response=l.calculateMD5("".concat(this._ha1,":").concat(this._nonce,":").concat(this._ncHex,":").concat(this._cnonce,":auth-int:").concat(a))):null===this._qop&&(s="".concat(this._method,":").concat(this._uri),a=l.calculateMD5(s),u.debug('authenticate() | using qop=null [a2:"%s"]',s),this._response=l.calculateMD5("".concat(this._ha1,":").concat(this._nonce,":").concat(a))),u.debug("authenticate() | response generated"),!0}},{key:"toString",value:function(){var e=[];if(!this._response)throw new Error("response field does not exist, cannot generate Authorization header");return e.push("algorithm=".concat(this._algorithm)),e.push('username="'.concat(this._credentials.username,'"')),e.push('realm="'.concat(this._realm,'"')),e.push('nonce="'.concat(this._nonce,'"')),e.push('uri="'.concat(this._uri,'"')),e.push('response="'.concat(this._response,'"')),this._opaque&&e.push('opaque="'.concat(this._opaque,'"')),this._qop&&(e.push("qop=".concat(this._qop)),e.push('cnonce="'.concat(this._cnonce,'"')),e.push("nc=".concat(this._ncHex))),"Digest ".concat(e.join(", "))}}])&&i(e.prototype,t),n&&i(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,n}()},{"./Logger":9,"./Utils":28}],6:[function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t){for(var n=0;n",o++):(e=null,0===s&&a('">"')),null===e&&(64===n.charCodeAt(o)?(e="@",o++):(e=null,0===s&&a('"@"')),null===e&&(44===n.charCodeAt(o)?(e=",",o++):(e=null,0===s&&a('","')),null===e&&(59===n.charCodeAt(o)?(e=";",o++):(e=null,0===s&&a('";"')),null===e&&(58===n.charCodeAt(o)?(e=":",o++):(e=null,0===s&&a('":"')),null===e&&(92===n.charCodeAt(o)?(e="\\",o++):(e=null,0===s&&a('"\\\\"')),null===e&&null===(e=m())&&(47===n.charCodeAt(o)?(e="/",o++):(e=null,0===s&&a('"/"')),null===e&&(91===n.charCodeAt(o)?(e="[",o++):(e=null,0===s&&a('"["')),null===e&&(93===n.charCodeAt(o)?(e="]",o++):(e=null,0===s&&a('"]"')),null===e&&(63===n.charCodeAt(o)?(e="?",o++):(e=null,0===s&&a('"?"')),null===e&&(61===n.charCodeAt(o)?(e="=",o++):(e=null,0===s&&a('"="')),null===e&&(123===n.charCodeAt(o)?(e="{",o++):(e=null,0===s&&a('"{"')),null===e&&(125===n.charCodeAt(o)?(e="}",o++):(e=null,0===s&&a('"}"')),null===e&&null===(e=v())&&(e=g()))))))))))))))));return e},word:U,STAR:x,SLASH:D,EQUAL:M,LPAREN:q,RPAREN:L,RAQUOT:H,LAQUOT:j,COMMA:F,SEMI:G,COLON:B,LDQUOT:W,RDQUOT:V,comment:function e(){var t,n,r;var i;i=o;t=q();if(null!==t){for(n=[],null===(r=K())&&null===(r=J())&&(r=e());null!==r;)n.push(r),null===(r=K())&&null===(r=J())&&(r=e());null!==n&&null!==(r=L())?t=[t,n,r]:(t=null,o=i)}else t=null,o=i;return t},ctext:K,quoted_string:z,quoted_string_clean:Y,qdtext:$,quoted_pair:J,SIP_URI_noparams:X,SIP_URI:Q,uri_scheme:Z,uri_scheme_sips:ee,uri_scheme_sip:te,userinfo:ne,user:re,user_unreserved:ie,password:oe,hostport:se,host:le,hostname:ue,domainlabel:ae,toplabel:ce,IPv6reference:fe,IPv6address:he,h16:de,ls32:_e,IPv4address:pe,dec_octet:me,port:ve,uri_parameters:ge,uri_parameter:ye,transport_param:Te,user_param:be,method_param:Se,ttl_param:Ce,maddr_param:Ee,lr_param:Ae,other_param:we,pname:Re,pvalue:Ie,paramchar:Oe,param_unreserved:Ne,headers:ke,header:Pe,hname:Ue,hvalue:xe,hnv_unreserved:De,Request_Response:function(){var e;null===(e=ft())&&(e=Me());return e},Request_Line:Me,Request_URI:qe,absoluteURI:Le,hier_part:He,net_path:je,abs_path:Fe,opaque_part:Ge,uric:Be,uric_no_slash:We,path_segments:Ve,segment:Ke,param:ze,pchar:Ye,scheme:$e,authority:Je,srvr:Xe,reg_name:Qe,query:Ze,SIP_Version:et,INVITEm:tt,ACKm:nt,OPTIONSm:rt,BYEm:it,CANCELm:ot,REGISTERm:st,SUBSCRIBEm:lt,NOTIFYm:ut,REFERm:at,Method:ct,Status_Line:ft,Status_Code:ht,extension_code:dt,Reason_Phrase:_t,Allow_Events:function(){var e,t,n,r,i,s;if(i=o,null!==(e=Lt())){for(t=[],s=o,null!==(n=F())&&null!==(r=Lt())?n=[n,r]:(n=null,o=s);null!==n;)t.push(n),s=o,null!==(n=F())&&null!==(r=Lt())?n=[n,r]:(n=null,o=s);null!==t?e=[e,t]:(e=null,o=i)}else e=null,o=i;return e},Call_ID:function(){var e,t,r,i,l,u;i=o,l=o,null!==(e=U())?(u=o,64===n.charCodeAt(o)?(t="@",o++):(t=null,0===s&&a('"@"')),null!==t&&null!==(r=U())?t=[t,r]:(t=null,o=u),null!==(t=null!==t?t:"")?e=[e,t]:(e=null,o=l)):(e=null,o=l);null!==e&&(c=i,e=void(Fn=n.substring(o,c)));var c;null===e&&(o=i);return e},Contact:function(){var e,t,n,r,i,s,l;if(i=o,null===(e=x()))if(s=o,null!==(e=pt())){for(t=[],l=o,null!==(n=F())&&null!==(r=pt())?n=[n,r]:(n=null,o=l);null!==n;)t.push(n),l=o,null!==(n=F())&&null!==(r=pt())?n=[n,r]:(n=null,o=l);null!==t?e=[e,t]:(e=null,o=s)}else e=null,o=s;null!==e&&(e=function(e){var t,n;for(n=Fn.multi_header.length,t=0;tl&&(l=o,u=[]),u.push(e))}function c(){var e;return"\r\n"===n.substr(o,2)?(e="\r\n",o+=2):(e=null,0===s&&a('"\\r\\n"')),e}function f(){var e;return/^[0-9]/.test(n.charAt(o))?(e=n.charAt(o),o++):(e=null,0===s&&a("[0-9]")),e}function h(){var e;return/^[a-zA-Z]/.test(n.charAt(o))?(e=n.charAt(o),o++):(e=null,0===s&&a("[a-zA-Z]")),e}function d(){var e;return/^[0-9a-fA-F]/.test(n.charAt(o))?(e=n.charAt(o),o++):(e=null,0===s&&a("[0-9a-fA-F]")),e}function _(){var e;return null===(e=v())&&(e=g()),e}function p(){var e;return/^[\0-\xFF]/.test(n.charAt(o))?(e=n.charAt(o),o++):(e=null,0===s&&a("[\\0-\\xFF]")),e}function m(){var e;return/^["]/.test(n.charAt(o))?(e=n.charAt(o),o++):(e=null,0===s&&a('["]')),e}function v(){var e;return 32===n.charCodeAt(o)?(e=" ",o++):(e=null,0===s&&a('" "')),e}function g(){var e;return 9===n.charCodeAt(o)?(e="\t",o++):(e=null,0===s&&a('"\\t"')),e}function y(){var e;return/^[a-zA-Z0-9]/.test(n.charAt(o))?(e=n.charAt(o),o++):(e=null,0===s&&a("[a-zA-Z0-9]")),e}function T(){var e;return 59===n.charCodeAt(o)?(e=";",o++):(e=null,0===s&&a('";"')),null===e&&(47===n.charCodeAt(o)?(e="/",o++):(e=null,0===s&&a('"/"')),null===e&&(63===n.charCodeAt(o)?(e="?",o++):(e=null,0===s&&a('"?"')),null===e&&(58===n.charCodeAt(o)?(e=":",o++):(e=null,0===s&&a('":"')),null===e&&(64===n.charCodeAt(o)?(e="@",o++):(e=null,0===s&&a('"@"')),null===e&&(38===n.charCodeAt(o)?(e="&",o++):(e=null,0===s&&a('"&"')),null===e&&(61===n.charCodeAt(o)?(e="=",o++):(e=null,0===s&&a('"="')),null===e&&(43===n.charCodeAt(o)?(e="+",o++):(e=null,0===s&&a('"+"')),null===e&&(36===n.charCodeAt(o)?(e="$",o++):(e=null,0===s&&a('"$"')),null===e&&(44===n.charCodeAt(o)?(e=",",o++):(e=null,0===s&&a('","'))))))))))),e}function b(){var e;return null===(e=y())&&(e=S()),e}function S(){var e;return 45===n.charCodeAt(o)?(e="-",o++):(e=null,0===s&&a('"-"')),null===e&&(95===n.charCodeAt(o)?(e="_",o++):(e=null,0===s&&a('"_"')),null===e&&(46===n.charCodeAt(o)?(e=".",o++):(e=null,0===s&&a('"."')),null===e&&(33===n.charCodeAt(o)?(e="!",o++):(e=null,0===s&&a('"!"')),null===e&&(126===n.charCodeAt(o)?(e="~",o++):(e=null,0===s&&a('"~"')),null===e&&(42===n.charCodeAt(o)?(e="*",o++):(e=null,0===s&&a('"*"')),null===e&&(39===n.charCodeAt(o)?(e="'",o++):(e=null,0===s&&a('"\'"')),null===e&&(40===n.charCodeAt(o)?(e="(",o++):(e=null,0===s&&a('"("')),null===e&&(41===n.charCodeAt(o)?(e=")",o++):(e=null,0===s&&a('")"')))))))))),e}function C(){var e,t,r,i,l;return i=o,l=o,37===n.charCodeAt(o)?(e="%",o++):(e=null,0===s&&a('"%"')),null!==e&&null!==(t=d())&&null!==(r=d())?e=[e,t,r]:(e=null,o=l),null!==e&&(e=e.join("")),null===e&&(o=i),e}function E(){var e,t,n,r,i,s;for(r=o,i=o,s=o,e=[],t=_();null!==t;)e.push(t),t=_();if(null!==e&&null!==(t=c())?e=[e,t]:(e=null,o=s),null!==(e=null!==e?e:"")){if(null!==(n=_()))for(t=[];null!==n;)t.push(n),n=_();else t=null;null!==t?e=[e,t]:(e=null,o=i)}else e=null,o=i;return null!==e&&(e=" "),null===e&&(o=r),e}function A(){var e;return e=null!==(e=E())?e:""}function w(){var e,t,r,i,l;for(i=o,l=o,e=[],null===(t=v())&&(t=g());null!==t;)e.push(t),null===(t=v())&&(t=g());return null!==e?(58===n.charCodeAt(o)?(t=":",o++):(t=null,0===s&&a('":"')),null!==t&&null!==(r=A())?e=[e,t,r]:(e=null,o=l)):(e=null,o=l),null!==e&&(e=":"),null===e&&(o=i),e}function R(){var e,t,r,i,s,l,u,a;if(s=o,l=o,null!==(t=I()))for(e=[];null!==t;)e.push(t),t=I();else e=null;if(null!==e){for(t=[],u=o,r=[],i=E();null!==i;)r.push(i),i=E();for(null!==r&&null!==(i=I())?r=[r,i]:(r=null,o=u);null!==r;){for(t.push(r),u=o,r=[],i=E();null!==i;)r.push(i),i=E();null!==r&&null!==(i=I())?r=[r,i]:(r=null,o=u)}null!==t?e=[e,t]:(e=null,o=l)}else e=null,o=l;return null!==e&&(a=s,e=n.substring(o,a)),null===e&&(o=s),e}function I(){var e;return/^[!-~]/.test(n.charAt(o))?(e=n.charAt(o),o++):(e=null,0===s&&a("[!-~]")),null===e&&(e=O()),e}function O(){var e;return/^[\x80-\uFFFF]/.test(n.charAt(o))?(e=n.charAt(o),o++):(e=null,0===s&&a("[\\x80-\\uFFFF]")),e}function N(){var e;return/^[\x80-\xBF]/.test(n.charAt(o))?(e=n.charAt(o),o++):(e=null,0===s&&a("[\\x80-\\xBF]")),e}function k(){var e,t,r,i;if(r=o,null===(t=y())&&(45===n.charCodeAt(o)?(t="-",o++):(t=null,0===s&&a('"-"')),null===t&&(46===n.charCodeAt(o)?(t=".",o++):(t=null,0===s&&a('"."')),null===t&&(33===n.charCodeAt(o)?(t="!",o++):(t=null,0===s&&a('"!"')),null===t&&(37===n.charCodeAt(o)?(t="%",o++):(t=null,0===s&&a('"%"')),null===t&&(42===n.charCodeAt(o)?(t="*",o++):(t=null,0===s&&a('"*"')),null===t&&(95===n.charCodeAt(o)?(t="_",o++):(t=null,0===s&&a('"_"')),null===t&&(43===n.charCodeAt(o)?(t="+",o++):(t=null,0===s&&a('"+"')),null===t&&(96===n.charCodeAt(o)?(t="`",o++):(t=null,0===s&&a('"`"')),null===t&&(39===n.charCodeAt(o)?(t="'",o++):(t=null,0===s&&a('"\'"')),null===t&&(126===n.charCodeAt(o)?(t="~",o++):(t=null,0===s&&a('"~"')))))))))))),null!==t)for(e=[];null!==t;)e.push(t),null===(t=y())&&(45===n.charCodeAt(o)?(t="-",o++):(t=null,0===s&&a('"-"')),null===t&&(46===n.charCodeAt(o)?(t=".",o++):(t=null,0===s&&a('"."')),null===t&&(33===n.charCodeAt(o)?(t="!",o++):(t=null,0===s&&a('"!"')),null===t&&(37===n.charCodeAt(o)?(t="%",o++):(t=null,0===s&&a('"%"')),null===t&&(42===n.charCodeAt(o)?(t="*",o++):(t=null,0===s&&a('"*"')),null===t&&(95===n.charCodeAt(o)?(t="_",o++):(t=null,0===s&&a('"_"')),null===t&&(43===n.charCodeAt(o)?(t="+",o++):(t=null,0===s&&a('"+"')),null===t&&(96===n.charCodeAt(o)?(t="`",o++):(t=null,0===s&&a('"`"')),null===t&&(39===n.charCodeAt(o)?(t="'",o++):(t=null,0===s&&a('"\'"')),null===t&&(126===n.charCodeAt(o)?(t="~",o++):(t=null,0===s&&a('"~"'))))))))))));else e=null;return null!==e&&(i=r,e=n.substring(o,i)),null===e&&(o=r),e}function P(){var e,t,r,i;if(r=o,null===(t=y())&&(45===n.charCodeAt(o)?(t="-",o++):(t=null,0===s&&a('"-"')),null===t&&(33===n.charCodeAt(o)?(t="!",o++):(t=null,0===s&&a('"!"')),null===t&&(37===n.charCodeAt(o)?(t="%",o++):(t=null,0===s&&a('"%"')),null===t&&(42===n.charCodeAt(o)?(t="*",o++):(t=null,0===s&&a('"*"')),null===t&&(95===n.charCodeAt(o)?(t="_",o++):(t=null,0===s&&a('"_"')),null===t&&(43===n.charCodeAt(o)?(t="+",o++):(t=null,0===s&&a('"+"')),null===t&&(96===n.charCodeAt(o)?(t="`",o++):(t=null,0===s&&a('"`"')),null===t&&(39===n.charCodeAt(o)?(t="'",o++):(t=null,0===s&&a('"\'"')),null===t&&(126===n.charCodeAt(o)?(t="~",o++):(t=null,0===s&&a('"~"'))))))))))),null!==t)for(e=[];null!==t;)e.push(t),null===(t=y())&&(45===n.charCodeAt(o)?(t="-",o++):(t=null,0===s&&a('"-"')),null===t&&(33===n.charCodeAt(o)?(t="!",o++):(t=null,0===s&&a('"!"')),null===t&&(37===n.charCodeAt(o)?(t="%",o++):(t=null,0===s&&a('"%"')),null===t&&(42===n.charCodeAt(o)?(t="*",o++):(t=null,0===s&&a('"*"')),null===t&&(95===n.charCodeAt(o)?(t="_",o++):(t=null,0===s&&a('"_"')),null===t&&(43===n.charCodeAt(o)?(t="+",o++):(t=null,0===s&&a('"+"')),null===t&&(96===n.charCodeAt(o)?(t="`",o++):(t=null,0===s&&a('"`"')),null===t&&(39===n.charCodeAt(o)?(t="'",o++):(t=null,0===s&&a('"\'"')),null===t&&(126===n.charCodeAt(o)?(t="~",o++):(t=null,0===s&&a('"~"')))))))))));else e=null;return null!==e&&(i=r,e=n.substring(o,i)),null===e&&(o=r),e}function U(){var e,t,r,i;if(r=o,null===(t=y())&&(45===n.charCodeAt(o)?(t="-",o++):(t=null,0===s&&a('"-"')),null===t&&(46===n.charCodeAt(o)?(t=".",o++):(t=null,0===s&&a('"."')),null===t&&(33===n.charCodeAt(o)?(t="!",o++):(t=null,0===s&&a('"!"')),null===t&&(37===n.charCodeAt(o)?(t="%",o++):(t=null,0===s&&a('"%"')),null===t&&(42===n.charCodeAt(o)?(t="*",o++):(t=null,0===s&&a('"*"')),null===t&&(95===n.charCodeAt(o)?(t="_",o++):(t=null,0===s&&a('"_"')),null===t&&(43===n.charCodeAt(o)?(t="+",o++):(t=null,0===s&&a('"+"')),null===t&&(96===n.charCodeAt(o)?(t="`",o++):(t=null,0===s&&a('"`"')),null===t&&(39===n.charCodeAt(o)?(t="'",o++):(t=null,0===s&&a('"\'"')),null===t&&(126===n.charCodeAt(o)?(t="~",o++):(t=null,0===s&&a('"~"')),null===t&&(40===n.charCodeAt(o)?(t="(",o++):(t=null,0===s&&a('"("')),null===t&&(41===n.charCodeAt(o)?(t=")",o++):(t=null,0===s&&a('")"')),null===t&&(60===n.charCodeAt(o)?(t="<",o++):(t=null,0===s&&a('"<"')),null===t&&(62===n.charCodeAt(o)?(t=">",o++):(t=null,0===s&&a('">"')),null===t&&(58===n.charCodeAt(o)?(t=":",o++):(t=null,0===s&&a('":"')),null===t&&(92===n.charCodeAt(o)?(t="\\",o++):(t=null,0===s&&a('"\\\\"')),null===t&&null===(t=m())&&(47===n.charCodeAt(o)?(t="/",o++):(t=null,0===s&&a('"/"')),null===t&&(91===n.charCodeAt(o)?(t="[",o++):(t=null,0===s&&a('"["')),null===t&&(93===n.charCodeAt(o)?(t="]",o++):(t=null,0===s&&a('"]"')),null===t&&(63===n.charCodeAt(o)?(t="?",o++):(t=null,0===s&&a('"?"')),null===t&&(123===n.charCodeAt(o)?(t="{",o++):(t=null,0===s&&a('"{"')),null===t&&(125===n.charCodeAt(o)?(t="}",o++):(t=null,0===s&&a('"}"')))))))))))))))))))))))),null!==t)for(e=[];null!==t;)e.push(t),null===(t=y())&&(45===n.charCodeAt(o)?(t="-",o++):(t=null,0===s&&a('"-"')),null===t&&(46===n.charCodeAt(o)?(t=".",o++):(t=null,0===s&&a('"."')),null===t&&(33===n.charCodeAt(o)?(t="!",o++):(t=null,0===s&&a('"!"')),null===t&&(37===n.charCodeAt(o)?(t="%",o++):(t=null,0===s&&a('"%"')),null===t&&(42===n.charCodeAt(o)?(t="*",o++):(t=null,0===s&&a('"*"')),null===t&&(95===n.charCodeAt(o)?(t="_",o++):(t=null,0===s&&a('"_"')),null===t&&(43===n.charCodeAt(o)?(t="+",o++):(t=null,0===s&&a('"+"')),null===t&&(96===n.charCodeAt(o)?(t="`",o++):(t=null,0===s&&a('"`"')),null===t&&(39===n.charCodeAt(o)?(t="'",o++):(t=null,0===s&&a('"\'"')),null===t&&(126===n.charCodeAt(o)?(t="~",o++):(t=null,0===s&&a('"~"')),null===t&&(40===n.charCodeAt(o)?(t="(",o++):(t=null,0===s&&a('"("')),null===t&&(41===n.charCodeAt(o)?(t=")",o++):(t=null,0===s&&a('")"')),null===t&&(60===n.charCodeAt(o)?(t="<",o++):(t=null,0===s&&a('"<"')),null===t&&(62===n.charCodeAt(o)?(t=">",o++):(t=null,0===s&&a('">"')),null===t&&(58===n.charCodeAt(o)?(t=":",o++):(t=null,0===s&&a('":"')),null===t&&(92===n.charCodeAt(o)?(t="\\",o++):(t=null,0===s&&a('"\\\\"')),null===t&&null===(t=m())&&(47===n.charCodeAt(o)?(t="/",o++):(t=null,0===s&&a('"/"')),null===t&&(91===n.charCodeAt(o)?(t="[",o++):(t=null,0===s&&a('"["')),null===t&&(93===n.charCodeAt(o)?(t="]",o++):(t=null,0===s&&a('"]"')),null===t&&(63===n.charCodeAt(o)?(t="?",o++):(t=null,0===s&&a('"?"')),null===t&&(123===n.charCodeAt(o)?(t="{",o++):(t=null,0===s&&a('"{"')),null===t&&(125===n.charCodeAt(o)?(t="}",o++):(t=null,0===s&&a('"}"'))))))))))))))))))))))));else e=null;return null!==e&&(i=r,e=n.substring(o,i)),null===e&&(o=r),e}function x(){var e,t,r,i,l;return i=o,l=o,null!==(e=A())?(42===n.charCodeAt(o)?(t="*",o++):(t=null,0===s&&a('"*"')),null!==t&&null!==(r=A())?e=[e,t,r]:(e=null,o=l)):(e=null,o=l),null!==e&&(e="*"),null===e&&(o=i),e}function D(){var e,t,r,i,l;return i=o,l=o,null!==(e=A())?(47===n.charCodeAt(o)?(t="/",o++):(t=null,0===s&&a('"/"')),null!==t&&null!==(r=A())?e=[e,t,r]:(e=null,o=l)):(e=null,o=l),null!==e&&(e="/"),null===e&&(o=i),e}function M(){var e,t,r,i,l;return i=o,l=o,null!==(e=A())?(61===n.charCodeAt(o)?(t="=",o++):(t=null,0===s&&a('"="')),null!==t&&null!==(r=A())?e=[e,t,r]:(e=null,o=l)):(e=null,o=l),null!==e&&(e="="),null===e&&(o=i),e}function q(){var e,t,r,i,l;return i=o,l=o,null!==(e=A())?(40===n.charCodeAt(o)?(t="(",o++):(t=null,0===s&&a('"("')),null!==t&&null!==(r=A())?e=[e,t,r]:(e=null,o=l)):(e=null,o=l),null!==e&&(e="("),null===e&&(o=i),e}function L(){var e,t,r,i,l;return i=o,l=o,null!==(e=A())?(41===n.charCodeAt(o)?(t=")",o++):(t=null,0===s&&a('")"')),null!==t&&null!==(r=A())?e=[e,t,r]:(e=null,o=l)):(e=null,o=l),null!==e&&(e=")"),null===e&&(o=i),e}function H(){var e,t,r,i;return r=o,i=o,62===n.charCodeAt(o)?(e=">",o++):(e=null,0===s&&a('">"')),null!==e&&null!==(t=A())?e=[e,t]:(e=null,o=i),null!==e&&(e=">"),null===e&&(o=r),e}function j(){var e,t,r,i;return r=o,i=o,null!==(e=A())?(60===n.charCodeAt(o)?(t="<",o++):(t=null,0===s&&a('"<"')),null!==t?e=[e,t]:(e=null,o=i)):(e=null,o=i),null!==e&&(e="<"),null===e&&(o=r),e}function F(){var e,t,r,i,l;return i=o,l=o,null!==(e=A())?(44===n.charCodeAt(o)?(t=",",o++):(t=null,0===s&&a('","')),null!==t&&null!==(r=A())?e=[e,t,r]:(e=null,o=l)):(e=null,o=l),null!==e&&(e=","),null===e&&(o=i),e}function G(){var e,t,r,i,l;return i=o,l=o,null!==(e=A())?(59===n.charCodeAt(o)?(t=";",o++):(t=null,0===s&&a('";"')),null!==t&&null!==(r=A())?e=[e,t,r]:(e=null,o=l)):(e=null,o=l),null!==e&&(e=";"),null===e&&(o=i),e}function B(){var e,t,r,i,l;return i=o,l=o,null!==(e=A())?(58===n.charCodeAt(o)?(t=":",o++):(t=null,0===s&&a('":"')),null!==t&&null!==(r=A())?e=[e,t,r]:(e=null,o=l)):(e=null,o=l),null!==e&&(e=":"),null===e&&(o=i),e}function W(){var e,t,n,r;return n=o,r=o,null!==(e=A())&&null!==(t=m())?e=[e,t]:(e=null,o=r),null!==e&&(e='"'),null===e&&(o=n),e}function V(){var e,t,n,r;return n=o,r=o,null!==(e=m())&&null!==(t=A())?e=[e,t]:(e=null,o=r),null!==e&&(e='"'),null===e&&(o=n),e}function K(){var e;return/^[!-']/.test(n.charAt(o))?(e=n.charAt(o),o++):(e=null,0===s&&a("[!-']")),null===e&&(/^[*-[]/.test(n.charAt(o))?(e=n.charAt(o),o++):(e=null,0===s&&a("[*-[]")),null===e&&(/^[\]-~]/.test(n.charAt(o))?(e=n.charAt(o),o++):(e=null,0===s&&a("[\\]-~]")),null===e&&null===(e=O())&&(e=E()))),e}function z(){var e,t,r,i,s,l,u;if(s=o,l=o,null!==(e=A()))if(null!==(t=m())){for(r=[],null===(i=$())&&(i=J());null!==i;)r.push(i),null===(i=$())&&(i=J());null!==r&&null!==(i=m())?e=[e,t,r,i]:(e=null,o=l)}else e=null,o=l;else e=null,o=l;return null!==e&&(u=s,e=n.substring(o,u)),null===e&&(o=s),e}function Y(){var e,t,r,i,s,l,u,a;if(s=o,l=o,null!==(e=A()))if(null!==(t=m())){for(r=[],null===(i=$())&&(i=J());null!==i;)r.push(i),null===(i=$())&&(i=J());null!==r&&null!==(i=m())?e=[e,t,r,i]:(e=null,o=l)}else e=null,o=l;else e=null,o=l;return null!==e&&(u=s,e=(a=n.substring(o,u).trim()).substring(1,a.length-1).replace(/\\([\x00-\x09\x0b-\x0c\x0e-\x7f])/g,"$1")),null===e&&(o=s),e}function $(){var e;return null===(e=E())&&(33===n.charCodeAt(o)?(e="!",o++):(e=null,0===s&&a('"!"')),null===e&&(/^[#-[]/.test(n.charAt(o))?(e=n.charAt(o),o++):(e=null,0===s&&a("[#-[]")),null===e&&(/^[\]-~]/.test(n.charAt(o))?(e=n.charAt(o),o++):(e=null,0===s&&a("[\\]-~]")),null===e&&(e=O())))),e}function J(){var e,t,r;return r=o,92===n.charCodeAt(o)?(e="\\",o++):(e=null,0===s&&a('"\\\\"')),null!==e?(/^[\0-\t]/.test(n.charAt(o))?(t=n.charAt(o),o++):(t=null,0===s&&a("[\\0-\\t]")),null===t&&(/^[\x0B-\f]/.test(n.charAt(o))?(t=n.charAt(o),o++):(t=null,0===s&&a("[\\x0B-\\f]")),null===t&&(/^[\x0E-]/.test(n.charAt(o))?(t=n.charAt(o),o++):(t=null,0===s&&a("[\\x0E-]")))),null!==t?e=[e,t]:(e=null,o=r)):(e=null,o=r),e}function X(){var e,t,r,i,l,u;return l=o,u=o,null!==(e=Z())?(58===n.charCodeAt(o)?(t=":",o++):(t=null,0===s&&a('":"')),null!==t&&null!==(r=null!==(r=ne())?r:"")&&null!==(i=se())?e=[e,t,r,i]:(e=null,o=u)):(e=null,o=u),null!==e&&(e=function(e){try{Fn.uri=new Hn(Fn.scheme,Fn.user,Fn.host,Fn.port),delete Fn.scheme,delete Fn.user,delete Fn.host,delete Fn.host_type,delete Fn.port}catch(e){Fn=-1}}()),null===e&&(o=l),e}function Q(){var e,t,i,l,u,c,f,h;return f=o,h=o,null!==(e=Z())?(58===n.charCodeAt(o)?(t=":",o++):(t=null,0===s&&a('":"')),null!==t&&null!==(i=null!==(i=ne())?i:"")&&null!==(l=se())&&null!==(u=ge())&&null!==(c=null!==(c=ke())?c:"")?e=[e,t,i,l,u,c]:(e=null,o=h)):(e=null,o=h),null!==e&&(e=function(e){try{Fn.uri=new Hn(Fn.scheme,Fn.user,Fn.host,Fn.port,Fn.uri_params,Fn.uri_headers),delete Fn.scheme,delete Fn.user,delete Fn.host,delete Fn.host_type,delete Fn.port,delete Fn.uri_params,"SIP_URI"===r&&(Fn=Fn.uri)}catch(e){Fn=-1}}()),null===e&&(o=f),e}function Z(){var e;return null===(e=ee())&&(e=te()),e}function ee(){var e,t,r;return t=o,"sips"===n.substr(o,4).toLowerCase()?(e=n.substr(o,4),o+=4):(e=null,0===s&&a('"sips"')),null!==e&&(r=e,e=void(Fn.scheme=r.toLowerCase())),null===e&&(o=t),e}function te(){var e,t,r;return t=o,"sip"===n.substr(o,3).toLowerCase()?(e=n.substr(o,3),o+=3):(e=null,0===s&&a('"sip"')),null!==e&&(r=e,e=void(Fn.scheme=r.toLowerCase())),null===e&&(o=t),e}function ne(){var e,t,r,i,l,u,c;return i=o,l=o,null!==(e=re())?(u=o,58===n.charCodeAt(o)?(t=":",o++):(t=null,0===s&&a('":"')),null!==t&&null!==(r=oe())?t=[t,r]:(t=null,o=u),null!==(t=null!==t?t:"")?(64===n.charCodeAt(o)?(r="@",o++):(r=null,0===s&&a('"@"')),null!==r?e=[e,t,r]:(e=null,o=l)):(e=null,o=l)):(e=null,o=l),null!==e&&(c=i,e=void(Fn.user=decodeURIComponent(n.substring(o-1,c)))),null===e&&(o=i),e}function re(){var e,t;if(null===(t=b())&&null===(t=C())&&(t=ie()),null!==t)for(e=[];null!==t;)e.push(t),null===(t=b())&&null===(t=C())&&(t=ie());else e=null;return e}function ie(){var e;return 38===n.charCodeAt(o)?(e="&",o++):(e=null,0===s&&a('"&"')),null===e&&(61===n.charCodeAt(o)?(e="=",o++):(e=null,0===s&&a('"="')),null===e&&(43===n.charCodeAt(o)?(e="+",o++):(e=null,0===s&&a('"+"')),null===e&&(36===n.charCodeAt(o)?(e="$",o++):(e=null,0===s&&a('"$"')),null===e&&(44===n.charCodeAt(o)?(e=",",o++):(e=null,0===s&&a('","')),null===e&&(59===n.charCodeAt(o)?(e=";",o++):(e=null,0===s&&a('";"')),null===e&&(63===n.charCodeAt(o)?(e="?",o++):(e=null,0===s&&a('"?"')),null===e&&(47===n.charCodeAt(o)?(e="/",o++):(e=null,0===s&&a('"/"'))))))))),e}function oe(){var e,t,r,i;for(r=o,e=[],null===(t=b())&&null===(t=C())&&(38===n.charCodeAt(o)?(t="&",o++):(t=null,0===s&&a('"&"')),null===t&&(61===n.charCodeAt(o)?(t="=",o++):(t=null,0===s&&a('"="')),null===t&&(43===n.charCodeAt(o)?(t="+",o++):(t=null,0===s&&a('"+"')),null===t&&(36===n.charCodeAt(o)?(t="$",o++):(t=null,0===s&&a('"$"')),null===t&&(44===n.charCodeAt(o)?(t=",",o++):(t=null,0===s&&a('","')))))));null!==t;)e.push(t),null===(t=b())&&null===(t=C())&&(38===n.charCodeAt(o)?(t="&",o++):(t=null,0===s&&a('"&"')),null===t&&(61===n.charCodeAt(o)?(t="=",o++):(t=null,0===s&&a('"="')),null===t&&(43===n.charCodeAt(o)?(t="+",o++):(t=null,0===s&&a('"+"')),null===t&&(36===n.charCodeAt(o)?(t="$",o++):(t=null,0===s&&a('"$"')),null===t&&(44===n.charCodeAt(o)?(t=",",o++):(t=null,0===s&&a('","')))))));return null!==e&&(i=r,e=void(Fn.password=n.substring(o,i))),null===e&&(o=r),e}function se(){var e,t,r,i,l;return i=o,null!==(e=le())?(l=o,58===n.charCodeAt(o)?(t=":",o++):(t=null,0===s&&a('":"')),null!==t&&null!==(r=ve())?t=[t,r]:(t=null,o=l),null!==(t=null!==t?t:"")?e=[e,t]:(e=null,o=i)):(e=null,o=i),e}function le(){var e,t,r;return t=o,null===(e=ue())&&null===(e=pe())&&(e=fe()),null!==e&&(r=t,Fn.host=n.substring(o,r).toLowerCase(),e=Fn.host),null===e&&(o=t),e}function ue(){var e,t,r,i,l,u,c;for(i=o,l=o,e=[],u=o,null!==(t=ae())?(46===n.charCodeAt(o)?(r=".",o++):(r=null,0===s&&a('"."')),null!==r?t=[t,r]:(t=null,o=u)):(t=null,o=u);null!==t;)e.push(t),u=o,null!==(t=ae())?(46===n.charCodeAt(o)?(r=".",o++):(r=null,0===s&&a('"."')),null!==r?t=[t,r]:(t=null,o=u)):(t=null,o=u);return null!==e&&null!==(t=ce())?(46===n.charCodeAt(o)?(r=".",o++):(r=null,0===s&&a('"."')),null!==(r=null!==r?r:"")?e=[e,t,r]:(e=null,o=l)):(e=null,o=l),null!==e&&(c=i,Fn.host_type="domain",e=n.substring(o,c)),null===e&&(o=i),e}function ae(){var e,t,r,i;if(i=o,null!==(e=y())){for(t=[],null===(r=y())&&(45===n.charCodeAt(o)?(r="-",o++):(r=null,0===s&&a('"-"')),null===r&&(95===n.charCodeAt(o)?(r="_",o++):(r=null,0===s&&a('"_"'))));null!==r;)t.push(r),null===(r=y())&&(45===n.charCodeAt(o)?(r="-",o++):(r=null,0===s&&a('"-"')),null===r&&(95===n.charCodeAt(o)?(r="_",o++):(r=null,0===s&&a('"_"'))));null!==t?e=[e,t]:(e=null,o=i)}else e=null,o=i;return e}function ce(){var e,t,r,i;if(i=o,null!==(e=h())){for(t=[],null===(r=y())&&(45===n.charCodeAt(o)?(r="-",o++):(r=null,0===s&&a('"-"')),null===r&&(95===n.charCodeAt(o)?(r="_",o++):(r=null,0===s&&a('"_"'))));null!==r;)t.push(r),null===(r=y())&&(45===n.charCodeAt(o)?(r="-",o++):(r=null,0===s&&a('"-"')),null===r&&(95===n.charCodeAt(o)?(r="_",o++):(r=null,0===s&&a('"_"'))));null!==t?e=[e,t]:(e=null,o=i)}else e=null,o=i;return e}function fe(){var e,t,r,i,l,u;return i=o,l=o,91===n.charCodeAt(o)?(e="[",o++):(e=null,0===s&&a('"["')),null!==e&&null!==(t=he())?(93===n.charCodeAt(o)?(r="]",o++):(r=null,0===s&&a('"]"')),null!==r?e=[e,t,r]:(e=null,o=l)):(e=null,o=l),null!==e&&(u=i,Fn.host_type="IPv6",e=n.substring(o,u)),null===e&&(o=i),e}function he(){var e,t,r,i,l,u,c,f,h,d,_,p,m,v,g,y,T;return v=o,g=o,null!==(e=de())?(58===n.charCodeAt(o)?(t=":",o++):(t=null,0===s&&a('":"')),null!==t&&null!==(r=de())?(58===n.charCodeAt(o)?(i=":",o++):(i=null,0===s&&a('":"')),null!==i&&null!==(l=de())?(58===n.charCodeAt(o)?(u=":",o++):(u=null,0===s&&a('":"')),null!==u&&null!==(c=de())?(58===n.charCodeAt(o)?(f=":",o++):(f=null,0===s&&a('":"')),null!==f&&null!==(h=de())?(58===n.charCodeAt(o)?(d=":",o++):(d=null,0===s&&a('":"')),null!==d&&null!==(_=de())?(58===n.charCodeAt(o)?(p=":",o++):(p=null,0===s&&a('":"')),null!==p&&null!==(m=_e())?e=[e,t,r,i,l,u,c,f,h,d,_,p,m]:(e=null,o=g)):(e=null,o=g)):(e=null,o=g)):(e=null,o=g)):(e=null,o=g)):(e=null,o=g)):(e=null,o=g),null===e&&(g=o,"::"===n.substr(o,2)?(e="::",o+=2):(e=null,0===s&&a('"::"')),null!==e&&null!==(t=de())?(58===n.charCodeAt(o)?(r=":",o++):(r=null,0===s&&a('":"')),null!==r&&null!==(i=de())?(58===n.charCodeAt(o)?(l=":",o++):(l=null,0===s&&a('":"')),null!==l&&null!==(u=de())?(58===n.charCodeAt(o)?(c=":",o++):(c=null,0===s&&a('":"')),null!==c&&null!==(f=de())?(58===n.charCodeAt(o)?(h=":",o++):(h=null,0===s&&a('":"')),null!==h&&null!==(d=de())?(58===n.charCodeAt(o)?(_=":",o++):(_=null,0===s&&a('":"')),null!==_&&null!==(p=_e())?e=[e,t,r,i,l,u,c,f,h,d,_,p]:(e=null,o=g)):(e=null,o=g)):(e=null,o=g)):(e=null,o=g)):(e=null,o=g)):(e=null,o=g),null===e&&(g=o,"::"===n.substr(o,2)?(e="::",o+=2):(e=null,0===s&&a('"::"')),null!==e&&null!==(t=de())?(58===n.charCodeAt(o)?(r=":",o++):(r=null,0===s&&a('":"')),null!==r&&null!==(i=de())?(58===n.charCodeAt(o)?(l=":",o++):(l=null,0===s&&a('":"')),null!==l&&null!==(u=de())?(58===n.charCodeAt(o)?(c=":",o++):(c=null,0===s&&a('":"')),null!==c&&null!==(f=de())?(58===n.charCodeAt(o)?(h=":",o++):(h=null,0===s&&a('":"')),null!==h&&null!==(d=_e())?e=[e,t,r,i,l,u,c,f,h,d]:(e=null,o=g)):(e=null,o=g)):(e=null,o=g)):(e=null,o=g)):(e=null,o=g),null===e&&(g=o,"::"===n.substr(o,2)?(e="::",o+=2):(e=null,0===s&&a('"::"')),null!==e&&null!==(t=de())?(58===n.charCodeAt(o)?(r=":",o++):(r=null,0===s&&a('":"')),null!==r&&null!==(i=de())?(58===n.charCodeAt(o)?(l=":",o++):(l=null,0===s&&a('":"')),null!==l&&null!==(u=de())?(58===n.charCodeAt(o)?(c=":",o++):(c=null,0===s&&a('":"')),null!==c&&null!==(f=_e())?e=[e,t,r,i,l,u,c,f]:(e=null,o=g)):(e=null,o=g)):(e=null,o=g)):(e=null,o=g),null===e&&(g=o,"::"===n.substr(o,2)?(e="::",o+=2):(e=null,0===s&&a('"::"')),null!==e&&null!==(t=de())?(58===n.charCodeAt(o)?(r=":",o++):(r=null,0===s&&a('":"')),null!==r&&null!==(i=de())?(58===n.charCodeAt(o)?(l=":",o++):(l=null,0===s&&a('":"')),null!==l&&null!==(u=_e())?e=[e,t,r,i,l,u]:(e=null,o=g)):(e=null,o=g)):(e=null,o=g),null===e&&(g=o,"::"===n.substr(o,2)?(e="::",o+=2):(e=null,0===s&&a('"::"')),null!==e&&null!==(t=de())?(58===n.charCodeAt(o)?(r=":",o++):(r=null,0===s&&a('":"')),null!==r&&null!==(i=_e())?e=[e,t,r,i]:(e=null,o=g)):(e=null,o=g),null===e&&(g=o,"::"===n.substr(o,2)?(e="::",o+=2):(e=null,0===s&&a('"::"')),null!==e&&null!==(t=_e())?e=[e,t]:(e=null,o=g),null===e&&(g=o,"::"===n.substr(o,2)?(e="::",o+=2):(e=null,0===s&&a('"::"')),null!==e&&null!==(t=de())?e=[e,t]:(e=null,o=g),null===e&&(g=o,null!==(e=de())?("::"===n.substr(o,2)?(t="::",o+=2):(t=null,0===s&&a('"::"')),null!==t&&null!==(r=de())?(58===n.charCodeAt(o)?(i=":",o++):(i=null,0===s&&a('":"')),null!==i&&null!==(l=de())?(58===n.charCodeAt(o)?(u=":",o++):(u=null,0===s&&a('":"')),null!==u&&null!==(c=de())?(58===n.charCodeAt(o)?(f=":",o++):(f=null,0===s&&a('":"')),null!==f&&null!==(h=de())?(58===n.charCodeAt(o)?(d=":",o++):(d=null,0===s&&a('":"')),null!==d&&null!==(_=_e())?e=[e,t,r,i,l,u,c,f,h,d,_]:(e=null,o=g)):(e=null,o=g)):(e=null,o=g)):(e=null,o=g)):(e=null,o=g)):(e=null,o=g),null===e&&(g=o,null!==(e=de())?(y=o,58===n.charCodeAt(o)?(t=":",o++):(t=null,0===s&&a('":"')),null!==t&&null!==(r=de())?t=[t,r]:(t=null,o=y),null!==(t=null!==t?t:"")?("::"===n.substr(o,2)?(r="::",o+=2):(r=null,0===s&&a('"::"')),null!==r&&null!==(i=de())?(58===n.charCodeAt(o)?(l=":",o++):(l=null,0===s&&a('":"')),null!==l&&null!==(u=de())?(58===n.charCodeAt(o)?(c=":",o++):(c=null,0===s&&a('":"')),null!==c&&null!==(f=de())?(58===n.charCodeAt(o)?(h=":",o++):(h=null,0===s&&a('":"')),null!==h&&null!==(d=_e())?e=[e,t,r,i,l,u,c,f,h,d]:(e=null,o=g)):(e=null,o=g)):(e=null,o=g)):(e=null,o=g)):(e=null,o=g)):(e=null,o=g),null===e&&(g=o,null!==(e=de())?(y=o,58===n.charCodeAt(o)?(t=":",o++):(t=null,0===s&&a('":"')),null!==t&&null!==(r=de())?t=[t,r]:(t=null,o=y),null!==(t=null!==t?t:"")?(y=o,58===n.charCodeAt(o)?(r=":",o++):(r=null,0===s&&a('":"')),null!==r&&null!==(i=de())?r=[r,i]:(r=null,o=y),null!==(r=null!==r?r:"")?("::"===n.substr(o,2)?(i="::",o+=2):(i=null,0===s&&a('"::"')),null!==i&&null!==(l=de())?(58===n.charCodeAt(o)?(u=":",o++):(u=null,0===s&&a('":"')),null!==u&&null!==(c=de())?(58===n.charCodeAt(o)?(f=":",o++):(f=null,0===s&&a('":"')),null!==f&&null!==(h=_e())?e=[e,t,r,i,l,u,c,f,h]:(e=null,o=g)):(e=null,o=g)):(e=null,o=g)):(e=null,o=g)):(e=null,o=g)):(e=null,o=g),null===e&&(g=o,null!==(e=de())?(y=o,58===n.charCodeAt(o)?(t=":",o++):(t=null,0===s&&a('":"')),null!==t&&null!==(r=de())?t=[t,r]:(t=null,o=y),null!==(t=null!==t?t:"")?(y=o,58===n.charCodeAt(o)?(r=":",o++):(r=null,0===s&&a('":"')),null!==r&&null!==(i=de())?r=[r,i]:(r=null,o=y),null!==(r=null!==r?r:"")?(y=o,58===n.charCodeAt(o)?(i=":",o++):(i=null,0===s&&a('":"')),null!==i&&null!==(l=de())?i=[i,l]:(i=null,o=y),null!==(i=null!==i?i:"")?("::"===n.substr(o,2)?(l="::",o+=2):(l=null,0===s&&a('"::"')),null!==l&&null!==(u=de())?(58===n.charCodeAt(o)?(c=":",o++):(c=null,0===s&&a('":"')),null!==c&&null!==(f=_e())?e=[e,t,r,i,l,u,c,f]:(e=null,o=g)):(e=null,o=g)):(e=null,o=g)):(e=null,o=g)):(e=null,o=g)):(e=null,o=g),null===e&&(g=o,null!==(e=de())?(y=o,58===n.charCodeAt(o)?(t=":",o++):(t=null,0===s&&a('":"')),null!==t&&null!==(r=de())?t=[t,r]:(t=null,o=y),null!==(t=null!==t?t:"")?(y=o,58===n.charCodeAt(o)?(r=":",o++):(r=null,0===s&&a('":"')),null!==r&&null!==(i=de())?r=[r,i]:(r=null,o=y),null!==(r=null!==r?r:"")?(y=o,58===n.charCodeAt(o)?(i=":",o++):(i=null,0===s&&a('":"')),null!==i&&null!==(l=de())?i=[i,l]:(i=null,o=y),null!==(i=null!==i?i:"")?(y=o,58===n.charCodeAt(o)?(l=":",o++):(l=null,0===s&&a('":"')),null!==l&&null!==(u=de())?l=[l,u]:(l=null,o=y),null!==(l=null!==l?l:"")?("::"===n.substr(o,2)?(u="::",o+=2):(u=null,0===s&&a('"::"')),null!==u&&null!==(c=_e())?e=[e,t,r,i,l,u,c]:(e=null,o=g)):(e=null,o=g)):(e=null,o=g)):(e=null,o=g)):(e=null,o=g)):(e=null,o=g),null===e&&(g=o,null!==(e=de())?(y=o,58===n.charCodeAt(o)?(t=":",o++):(t=null,0===s&&a('":"')),null!==t&&null!==(r=de())?t=[t,r]:(t=null,o=y),null!==(t=null!==t?t:"")?(y=o,58===n.charCodeAt(o)?(r=":",o++):(r=null,0===s&&a('":"')),null!==r&&null!==(i=de())?r=[r,i]:(r=null,o=y),null!==(r=null!==r?r:"")?(y=o,58===n.charCodeAt(o)?(i=":",o++):(i=null,0===s&&a('":"')),null!==i&&null!==(l=de())?i=[i,l]:(i=null,o=y),null!==(i=null!==i?i:"")?(y=o,58===n.charCodeAt(o)?(l=":",o++):(l=null,0===s&&a('":"')),null!==l&&null!==(u=de())?l=[l,u]:(l=null,o=y),null!==(l=null!==l?l:"")?(y=o,58===n.charCodeAt(o)?(u=":",o++):(u=null,0===s&&a('":"')),null!==u&&null!==(c=de())?u=[u,c]:(u=null,o=y),null!==(u=null!==u?u:"")?("::"===n.substr(o,2)?(c="::",o+=2):(c=null,0===s&&a('"::"')),null!==c&&null!==(f=de())?e=[e,t,r,i,l,u,c,f]:(e=null,o=g)):(e=null,o=g)):(e=null,o=g)):(e=null,o=g)):(e=null,o=g)):(e=null,o=g)):(e=null,o=g),null===e&&(g=o,null!==(e=de())?(y=o,58===n.charCodeAt(o)?(t=":",o++):(t=null,0===s&&a('":"')),null!==t&&null!==(r=de())?t=[t,r]:(t=null,o=y),null!==(t=null!==t?t:"")?(y=o,58===n.charCodeAt(o)?(r=":",o++):(r=null,0===s&&a('":"')),null!==r&&null!==(i=de())?r=[r,i]:(r=null,o=y),null!==(r=null!==r?r:"")?(y=o,58===n.charCodeAt(o)?(i=":",o++):(i=null,0===s&&a('":"')),null!==i&&null!==(l=de())?i=[i,l]:(i=null,o=y),null!==(i=null!==i?i:"")?(y=o,58===n.charCodeAt(o)?(l=":",o++):(l=null,0===s&&a('":"')),null!==l&&null!==(u=de())?l=[l,u]:(l=null,o=y),null!==(l=null!==l?l:"")?(y=o,58===n.charCodeAt(o)?(u=":",o++):(u=null,0===s&&a('":"')),null!==u&&null!==(c=de())?u=[u,c]:(u=null,o=y),null!==(u=null!==u?u:"")?(y=o,58===n.charCodeAt(o)?(c=":",o++):(c=null,0===s&&a('":"')),null!==c&&null!==(f=de())?c=[c,f]:(c=null,o=y),null!==(c=null!==c?c:"")?("::"===n.substr(o,2)?(f="::",o+=2):(f=null,0===s&&a('"::"')),null!==f?e=[e,t,r,i,l,u,c,f]:(e=null,o=g)):(e=null,o=g)):(e=null,o=g)):(e=null,o=g)):(e=null,o=g)):(e=null,o=g)):(e=null,o=g)):(e=null,o=g))))))))))))))),null!==e&&(T=v,Fn.host_type="IPv6",e=n.substring(o,T)),null===e&&(o=v),e}function de(){var e,t,n,r,i;return i=o,null!==(e=d())&&null!==(t=null!==(t=d())?t:"")&&null!==(n=null!==(n=d())?n:"")&&null!==(r=null!==(r=d())?r:"")?e=[e,t,n,r]:(e=null,o=i),e}function _e(){var e,t,r,i;return i=o,null!==(e=de())?(58===n.charCodeAt(o)?(t=":",o++):(t=null,0===s&&a('":"')),null!==t&&null!==(r=de())?e=[e,t,r]:(e=null,o=i)):(e=null,o=i),null===e&&(e=pe()),e}function pe(){var e,t,r,i,l,u,c,f,h,d;return f=o,h=o,null!==(e=me())?(46===n.charCodeAt(o)?(t=".",o++):(t=null,0===s&&a('"."')),null!==t&&null!==(r=me())?(46===n.charCodeAt(o)?(i=".",o++):(i=null,0===s&&a('"."')),null!==i&&null!==(l=me())?(46===n.charCodeAt(o)?(u=".",o++):(u=null,0===s&&a('"."')),null!==u&&null!==(c=me())?e=[e,t,r,i,l,u,c]:(e=null,o=h)):(e=null,o=h)):(e=null,o=h)):(e=null,o=h),null!==e&&(d=f,Fn.host_type="IPv4",e=n.substring(o,d)),null===e&&(o=f),e}function me(){var e,t,r,i;return i=o,"25"===n.substr(o,2)?(e="25",o+=2):(e=null,0===s&&a('"25"')),null!==e?(/^[0-5]/.test(n.charAt(o))?(t=n.charAt(o),o++):(t=null,0===s&&a("[0-5]")),null!==t?e=[e,t]:(e=null,o=i)):(e=null,o=i),null===e&&(i=o,50===n.charCodeAt(o)?(e="2",o++):(e=null,0===s&&a('"2"')),null!==e?(/^[0-4]/.test(n.charAt(o))?(t=n.charAt(o),o++):(t=null,0===s&&a("[0-4]")),null!==t&&null!==(r=f())?e=[e,t,r]:(e=null,o=i)):(e=null,o=i),null===e&&(i=o,49===n.charCodeAt(o)?(e="1",o++):(e=null,0===s&&a('"1"')),null!==e&&null!==(t=f())&&null!==(r=f())?e=[e,t,r]:(e=null,o=i),null===e&&(i=o,/^[1-9]/.test(n.charAt(o))?(e=n.charAt(o),o++):(e=null,0===s&&a("[1-9]")),null!==e&&null!==(t=f())?e=[e,t]:(e=null,o=i),null===e&&(e=f())))),e}function ve(){var e,t,n,r,i,s,l,u;return s=o,l=o,null!==(e=null!==(e=f())?e:"")&&null!==(t=null!==(t=f())?t:"")&&null!==(n=null!==(n=f())?n:"")&&null!==(r=null!==(r=f())?r:"")&&null!==(i=null!==(i=f())?i:"")?e=[e,t,n,r,i]:(e=null,o=l),null!==e&&(u=e,u=parseInt(u.join("")),Fn.port=u,e=u),null===e&&(o=s),e}function ge(){var e,t,r,i;for(e=[],i=o,59===n.charCodeAt(o)?(t=";",o++):(t=null,0===s&&a('";"')),null!==t&&null!==(r=ye())?t=[t,r]:(t=null,o=i);null!==t;)e.push(t),i=o,59===n.charCodeAt(o)?(t=";",o++):(t=null,0===s&&a('";"')),null!==t&&null!==(r=ye())?t=[t,r]:(t=null,o=i);return e}function ye(){var e;return null===(e=Te())&&null===(e=be())&&null===(e=Se())&&null===(e=Ce())&&null===(e=Ee())&&null===(e=Ae())&&(e=we()),e}function Te(){var e,t,r,i,l;return r=o,i=o,"transport="===n.substr(o,10).toLowerCase()?(e=n.substr(o,10),o+=10):(e=null,0===s&&a('"transport="')),null!==e?("udp"===n.substr(o,3).toLowerCase()?(t=n.substr(o,3),o+=3):(t=null,0===s&&a('"udp"')),null===t&&("tcp"===n.substr(o,3).toLowerCase()?(t=n.substr(o,3),o+=3):(t=null,0===s&&a('"tcp"')),null===t&&("sctp"===n.substr(o,4).toLowerCase()?(t=n.substr(o,4),o+=4):(t=null,0===s&&a('"sctp"')),null===t&&("tls"===n.substr(o,3).toLowerCase()?(t=n.substr(o,3),o+=3):(t=null,0===s&&a('"tls"')),null===t&&(t=k())))),null!==t?e=[e,t]:(e=null,o=i)):(e=null,o=i),null!==e&&(l=e[1],Fn.uri_params||(Fn.uri_params={}),e=void(Fn.uri_params.transport=l.toLowerCase())),null===e&&(o=r),e}function be(){var e,t,r,i,l;return r=o,i=o,"user="===n.substr(o,5).toLowerCase()?(e=n.substr(o,5),o+=5):(e=null,0===s&&a('"user="')),null!==e?("phone"===n.substr(o,5).toLowerCase()?(t=n.substr(o,5),o+=5):(t=null,0===s&&a('"phone"')),null===t&&("ip"===n.substr(o,2).toLowerCase()?(t=n.substr(o,2),o+=2):(t=null,0===s&&a('"ip"')),null===t&&(t=k())),null!==t?e=[e,t]:(e=null,o=i)):(e=null,o=i),null!==e&&(l=e[1],Fn.uri_params||(Fn.uri_params={}),e=void(Fn.uri_params.user=l.toLowerCase())),null===e&&(o=r),e}function Se(){var e,t,r,i,l;return r=o,i=o,"method="===n.substr(o,7).toLowerCase()?(e=n.substr(o,7),o+=7):(e=null,0===s&&a('"method="')),null!==e&&null!==(t=ct())?e=[e,t]:(e=null,o=i),null!==e&&(l=e[1],Fn.uri_params||(Fn.uri_params={}),e=void(Fn.uri_params.method=l)),null===e&&(o=r),e}function Ce(){var e,t,r,i,l;return r=o,i=o,"ttl="===n.substr(o,4).toLowerCase()?(e=n.substr(o,4),o+=4):(e=null,0===s&&a('"ttl="')),null!==e&&null!==(t=An())?e=[e,t]:(e=null,o=i),null!==e&&(l=e[1],Fn.params||(Fn.params={}),e=void(Fn.params.ttl=l)),null===e&&(o=r),e}function Ee(){var e,t,r,i,l;return r=o,i=o,"maddr="===n.substr(o,6).toLowerCase()?(e=n.substr(o,6),o+=6):(e=null,0===s&&a('"maddr="')),null!==e&&null!==(t=le())?e=[e,t]:(e=null,o=i),null!==e&&(l=e[1],Fn.uri_params||(Fn.uri_params={}),e=void(Fn.uri_params.maddr=l)),null===e&&(o=r),e}function Ae(){var e,t,r,i,l,u;return i=o,l=o,"lr"===n.substr(o,2).toLowerCase()?(e=n.substr(o,2),o+=2):(e=null,0===s&&a('"lr"')),null!==e?(u=o,61===n.charCodeAt(o)?(t="=",o++):(t=null,0===s&&a('"="')),null!==t&&null!==(r=k())?t=[t,r]:(t=null,o=u),null!==(t=null!==t?t:"")?e=[e,t]:(e=null,o=l)):(e=null,o=l),null!==e&&(Fn.uri_params||(Fn.uri_params={}),e=void(Fn.uri_params.lr=void 0)),null===e&&(o=i),e}function we(){var e,t,r,i,l,u,c,f;return i=o,l=o,null!==(e=Re())?(u=o,61===n.charCodeAt(o)?(t="=",o++):(t=null,0===s&&a('"="')),null!==t&&null!==(r=Ie())?t=[t,r]:(t=null,o=u),null!==(t=null!==t?t:"")?e=[e,t]:(e=null,o=l)):(e=null,o=l),null!==e&&(c=e[0],f=e[1],Fn.uri_params||(Fn.uri_params={}),f=void 0===f?void 0:f[1],e=void(Fn.uri_params[c.toLowerCase()]=f)),null===e&&(o=i),e}function Re(){var e,t,n;if(n=o,null!==(t=Oe()))for(e=[];null!==t;)e.push(t),t=Oe();else e=null;return null!==e&&(e=e.join("")),null===e&&(o=n),e}function Ie(){var e,t,n;if(n=o,null!==(t=Oe()))for(e=[];null!==t;)e.push(t),t=Oe();else e=null;return null!==e&&(e=e.join("")),null===e&&(o=n),e}function Oe(){var e;return null===(e=Ne())&&null===(e=b())&&(e=C()),e}function Ne(){var e;return 91===n.charCodeAt(o)?(e="[",o++):(e=null,0===s&&a('"["')),null===e&&(93===n.charCodeAt(o)?(e="]",o++):(e=null,0===s&&a('"]"')),null===e&&(47===n.charCodeAt(o)?(e="/",o++):(e=null,0===s&&a('"/"')),null===e&&(58===n.charCodeAt(o)?(e=":",o++):(e=null,0===s&&a('":"')),null===e&&(38===n.charCodeAt(o)?(e="&",o++):(e=null,0===s&&a('"&"')),null===e&&(43===n.charCodeAt(o)?(e="+",o++):(e=null,0===s&&a('"+"')),null===e&&(36===n.charCodeAt(o)?(e="$",o++):(e=null,0===s&&a('"$"')))))))),e}function ke(){var e,t,r,i,l,u,c;if(u=o,63===n.charCodeAt(o)?(e="?",o++):(e=null,0===s&&a('"?"')),null!==e)if(null!==(t=Pe())){for(r=[],c=o,38===n.charCodeAt(o)?(i="&",o++):(i=null,0===s&&a('"&"')),null!==i&&null!==(l=Pe())?i=[i,l]:(i=null,o=c);null!==i;)r.push(i),c=o,38===n.charCodeAt(o)?(i="&",o++):(i=null,0===s&&a('"&"')),null!==i&&null!==(l=Pe())?i=[i,l]:(i=null,o=c);null!==r?e=[e,t,r]:(e=null,o=u)}else e=null,o=u;else e=null,o=u;return e}function Pe(){var e,t,r,i,l,u,c;return i=o,l=o,null!==(e=Ue())?(61===n.charCodeAt(o)?(t="=",o++):(t=null,0===s&&a('"="')),null!==t&&null!==(r=xe())?e=[e,t,r]:(e=null,o=l)):(e=null,o=l),null!==e&&(u=e[0],c=e[2],u=u.join("").toLowerCase(),c=c.join(""),Fn.uri_headers||(Fn.uri_headers={}),e=void(Fn.uri_headers[u]?Fn.uri_headers[u].push(c):Fn.uri_headers[u]=[c])),null===e&&(o=i),e}function Ue(){var e,t;if(null===(t=De())&&null===(t=b())&&(t=C()),null!==t)for(e=[];null!==t;)e.push(t),null===(t=De())&&null===(t=b())&&(t=C());else e=null;return e}function xe(){var e,t;for(e=[],null===(t=De())&&null===(t=b())&&(t=C());null!==t;)e.push(t),null===(t=De())&&null===(t=b())&&(t=C());return e}function De(){var e;return 91===n.charCodeAt(o)?(e="[",o++):(e=null,0===s&&a('"["')),null===e&&(93===n.charCodeAt(o)?(e="]",o++):(e=null,0===s&&a('"]"')),null===e&&(47===n.charCodeAt(o)?(e="/",o++):(e=null,0===s&&a('"/"')),null===e&&(63===n.charCodeAt(o)?(e="?",o++):(e=null,0===s&&a('"?"')),null===e&&(58===n.charCodeAt(o)?(e=":",o++):(e=null,0===s&&a('":"')),null===e&&(43===n.charCodeAt(o)?(e="+",o++):(e=null,0===s&&a('"+"')),null===e&&(36===n.charCodeAt(o)?(e="$",o++):(e=null,0===s&&a('"$"')))))))),e}function Me(){var e,t,n,r,i,s;return s=o,null!==(e=ct())&&null!==(t=v())&&null!==(n=qe())&&null!==(r=v())&&null!==(i=et())?e=[e,t,n,r,i]:(e=null,o=s),e}function qe(){var e;return null===(e=Q())&&(e=Le()),e}function Le(){var e,t,r,i;return i=o,null!==(e=$e())?(58===n.charCodeAt(o)?(t=":",o++):(t=null,0===s&&a('":"')),null!==t?(null===(r=He())&&(r=Ge()),null!==r?e=[e,t,r]:(e=null,o=i)):(e=null,o=i)):(e=null,o=i),e}function He(){var e,t,r,i,l;return i=o,null===(e=je())&&(e=Fe()),null!==e?(l=o,63===n.charCodeAt(o)?(t="?",o++):(t=null,0===s&&a('"?"')),null!==t&&null!==(r=Ze())?t=[t,r]:(t=null,o=l),null!==(t=null!==t?t:"")?e=[e,t]:(e=null,o=i)):(e=null,o=i),e}function je(){var e,t,r,i;return i=o,"//"===n.substr(o,2)?(e="//",o+=2):(e=null,0===s&&a('"//"')),null!==e&&null!==(t=Je())&&null!==(r=null!==(r=Fe())?r:"")?e=[e,t,r]:(e=null,o=i),e}function Fe(){var e,t,r;return r=o,47===n.charCodeAt(o)?(e="/",o++):(e=null,0===s&&a('"/"')),null!==e&&null!==(t=Ve())?e=[e,t]:(e=null,o=r),e}function Ge(){var e,t,n,r;if(r=o,null!==(e=We())){for(t=[],n=Be();null!==n;)t.push(n),n=Be();null!==t?e=[e,t]:(e=null,o=r)}else e=null,o=r;return e}function Be(){var e;return null===(e=T())&&null===(e=b())&&(e=C()),e}function We(){var e;return null===(e=b())&&null===(e=C())&&(59===n.charCodeAt(o)?(e=";",o++):(e=null,0===s&&a('";"')),null===e&&(63===n.charCodeAt(o)?(e="?",o++):(e=null,0===s&&a('"?"')),null===e&&(58===n.charCodeAt(o)?(e=":",o++):(e=null,0===s&&a('":"')),null===e&&(64===n.charCodeAt(o)?(e="@",o++):(e=null,0===s&&a('"@"')),null===e&&(38===n.charCodeAt(o)?(e="&",o++):(e=null,0===s&&a('"&"')),null===e&&(61===n.charCodeAt(o)?(e="=",o++):(e=null,0===s&&a('"="')),null===e&&(43===n.charCodeAt(o)?(e="+",o++):(e=null,0===s&&a('"+"')),null===e&&(36===n.charCodeAt(o)?(e="$",o++):(e=null,0===s&&a('"$"')),null===e&&(44===n.charCodeAt(o)?(e=",",o++):(e=null,0===s&&a('","'))))))))))),e}function Ve(){var e,t,r,i,l,u;if(l=o,null!==(e=Ke())){for(t=[],u=o,47===n.charCodeAt(o)?(r="/",o++):(r=null,0===s&&a('"/"')),null!==r&&null!==(i=Ke())?r=[r,i]:(r=null,o=u);null!==r;)t.push(r),u=o,47===n.charCodeAt(o)?(r="/",o++):(r=null,0===s&&a('"/"')),null!==r&&null!==(i=Ke())?r=[r,i]:(r=null,o=u);null!==t?e=[e,t]:(e=null,o=l)}else e=null,o=l;return e}function Ke(){var e,t,r,i,l,u;for(l=o,e=[],t=Ye();null!==t;)e.push(t),t=Ye();if(null!==e){for(t=[],u=o,59===n.charCodeAt(o)?(r=";",o++):(r=null,0===s&&a('";"')),null!==r&&null!==(i=ze())?r=[r,i]:(r=null,o=u);null!==r;)t.push(r),u=o,59===n.charCodeAt(o)?(r=";",o++):(r=null,0===s&&a('";"')),null!==r&&null!==(i=ze())?r=[r,i]:(r=null,o=u);null!==t?e=[e,t]:(e=null,o=l)}else e=null,o=l;return e}function ze(){var e,t;for(e=[],t=Ye();null!==t;)e.push(t),t=Ye();return e}function Ye(){var e;return null===(e=b())&&null===(e=C())&&(58===n.charCodeAt(o)?(e=":",o++):(e=null,0===s&&a('":"')),null===e&&(64===n.charCodeAt(o)?(e="@",o++):(e=null,0===s&&a('"@"')),null===e&&(38===n.charCodeAt(o)?(e="&",o++):(e=null,0===s&&a('"&"')),null===e&&(61===n.charCodeAt(o)?(e="=",o++):(e=null,0===s&&a('"="')),null===e&&(43===n.charCodeAt(o)?(e="+",o++):(e=null,0===s&&a('"+"')),null===e&&(36===n.charCodeAt(o)?(e="$",o++):(e=null,0===s&&a('"$"')),null===e&&(44===n.charCodeAt(o)?(e=",",o++):(e=null,0===s&&a('","'))))))))),e}function $e(){var e,t,r,i,l,u;if(i=o,l=o,null!==(e=h())){for(t=[],null===(r=h())&&null===(r=f())&&(43===n.charCodeAt(o)?(r="+",o++):(r=null,0===s&&a('"+"')),null===r&&(45===n.charCodeAt(o)?(r="-",o++):(r=null,0===s&&a('"-"')),null===r&&(46===n.charCodeAt(o)?(r=".",o++):(r=null,0===s&&a('"."')))));null!==r;)t.push(r),null===(r=h())&&null===(r=f())&&(43===n.charCodeAt(o)?(r="+",o++):(r=null,0===s&&a('"+"')),null===r&&(45===n.charCodeAt(o)?(r="-",o++):(r=null,0===s&&a('"-"')),null===r&&(46===n.charCodeAt(o)?(r=".",o++):(r=null,0===s&&a('"."')))));null!==t?e=[e,t]:(e=null,o=l)}else e=null,o=l;return null!==e&&(u=i,e=void(Fn.scheme=n.substring(o,u))),null===e&&(o=i),e}function Je(){var e;return null===(e=Xe())&&(e=Qe()),e}function Xe(){var e,t,r,i;return r=o,i=o,null!==(e=ne())?(64===n.charCodeAt(o)?(t="@",o++):(t=null,0===s&&a('"@"')),null!==t?e=[e,t]:(e=null,o=i)):(e=null,o=i),null!==(e=null!==e?e:"")&&null!==(t=se())?e=[e,t]:(e=null,o=r),e=null!==e?e:""}function Qe(){var e,t;if(null===(t=b())&&null===(t=C())&&(36===n.charCodeAt(o)?(t="$",o++):(t=null,0===s&&a('"$"')),null===t&&(44===n.charCodeAt(o)?(t=",",o++):(t=null,0===s&&a('","')),null===t&&(59===n.charCodeAt(o)?(t=";",o++):(t=null,0===s&&a('";"')),null===t&&(58===n.charCodeAt(o)?(t=":",o++):(t=null,0===s&&a('":"')),null===t&&(64===n.charCodeAt(o)?(t="@",o++):(t=null,0===s&&a('"@"')),null===t&&(38===n.charCodeAt(o)?(t="&",o++):(t=null,0===s&&a('"&"')),null===t&&(61===n.charCodeAt(o)?(t="=",o++):(t=null,0===s&&a('"="')),null===t&&(43===n.charCodeAt(o)?(t="+",o++):(t=null,0===s&&a('"+"')))))))))),null!==t)for(e=[];null!==t;)e.push(t),null===(t=b())&&null===(t=C())&&(36===n.charCodeAt(o)?(t="$",o++):(t=null,0===s&&a('"$"')),null===t&&(44===n.charCodeAt(o)?(t=",",o++):(t=null,0===s&&a('","')),null===t&&(59===n.charCodeAt(o)?(t=";",o++):(t=null,0===s&&a('";"')),null===t&&(58===n.charCodeAt(o)?(t=":",o++):(t=null,0===s&&a('":"')),null===t&&(64===n.charCodeAt(o)?(t="@",o++):(t=null,0===s&&a('"@"')),null===t&&(38===n.charCodeAt(o)?(t="&",o++):(t=null,0===s&&a('"&"')),null===t&&(61===n.charCodeAt(o)?(t="=",o++):(t=null,0===s&&a('"="')),null===t&&(43===n.charCodeAt(o)?(t="+",o++):(t=null,0===s&&a('"+"'))))))))));else e=null;return e}function Ze(){var e,t;for(e=[],t=Be();null!==t;)e.push(t),t=Be();return e}function et(){var e,t,r,i,l,u,c,h,d;if(c=o,h=o,"sip"===n.substr(o,3).toLowerCase()?(e=n.substr(o,3),o+=3):(e=null,0===s&&a('"SIP"')),null!==e)if(47===n.charCodeAt(o)?(t="/",o++):(t=null,0===s&&a('"/"')),null!==t){if(null!==(i=f()))for(r=[];null!==i;)r.push(i),i=f();else r=null;if(null!==r)if(46===n.charCodeAt(o)?(i=".",o++):(i=null,0===s&&a('"."')),null!==i){if(null!==(u=f()))for(l=[];null!==u;)l.push(u),u=f();else l=null;null!==l?e=[e,t,r,i,l]:(e=null,o=h)}else e=null,o=h;else e=null,o=h}else e=null,o=h;else e=null,o=h;return null!==e&&(d=c,e=void(Fn.sip_version=n.substring(o,d))),null===e&&(o=c),e}function tt(){var e;return"INVITE"===n.substr(o,6)?(e="INVITE",o+=6):(e=null,0===s&&a('"INVITE"')),e}function nt(){var e;return"ACK"===n.substr(o,3)?(e="ACK",o+=3):(e=null,0===s&&a('"ACK"')),e}function rt(){var e;return"OPTIONS"===n.substr(o,7)?(e="OPTIONS",o+=7):(e=null,0===s&&a('"OPTIONS"')),e}function it(){var e;return"BYE"===n.substr(o,3)?(e="BYE",o+=3):(e=null,0===s&&a('"BYE"')),e}function ot(){var e;return"CANCEL"===n.substr(o,6)?(e="CANCEL",o+=6):(e=null,0===s&&a('"CANCEL"')),e}function st(){var e;return"REGISTER"===n.substr(o,8)?(e="REGISTER",o+=8):(e=null,0===s&&a('"REGISTER"')),e}function lt(){var e;return"SUBSCRIBE"===n.substr(o,9)?(e="SUBSCRIBE",o+=9):(e=null,0===s&&a('"SUBSCRIBE"')),e}function ut(){var e;return"NOTIFY"===n.substr(o,6)?(e="NOTIFY",o+=6):(e=null,0===s&&a('"NOTIFY"')),e}function at(){var e;return"REFER"===n.substr(o,5)?(e="REFER",o+=5):(e=null,0===s&&a('"REFER"')),e}function ct(){var e,t,r;return t=o,null===(e=tt())&&null===(e=nt())&&null===(e=rt())&&null===(e=it())&&null===(e=ot())&&null===(e=st())&&null===(e=lt())&&null===(e=ut())&&null===(e=at())&&(e=k()),null!==e&&(r=t,Fn.method=n.substring(o,r),e=Fn.method),null===e&&(o=t),e}function ft(){var e,t,n,r,i,s;return s=o,null!==(e=et())&&null!==(t=v())&&null!==(n=ht())&&null!==(r=v())&&null!==(i=_t())?e=[e,t,n,r,i]:(e=null,o=s),e}function ht(){var e,t,n;return t=o,null!==(e=dt())&&(n=e,e=void(Fn.status_code=parseInt(n.join("")))),null===e&&(o=t),e}function dt(){var e,t,n,r;return r=o,null!==(e=f())&&null!==(t=f())&&null!==(n=f())?e=[e,t,n]:(e=null,o=r),e}function _t(){var e,t,r,i;for(r=o,e=[],null===(t=T())&&null===(t=b())&&null===(t=C())&&null===(t=O())&&null===(t=N())&&null===(t=v())&&(t=g());null!==t;)e.push(t),null===(t=T())&&null===(t=b())&&null===(t=C())&&null===(t=O())&&null===(t=N())&&null===(t=v())&&(t=g());return null!==e&&(i=r,e=void(Fn.reason_phrase=n.substring(o,i))),null===e&&(o=r),e}function pt(){var e,t,n,r,i,s,l;if(i=o,s=o,null===(e=X())&&(e=mt()),null!==e){for(t=[],l=o,null!==(n=G())&&null!==(r=gt())?n=[n,r]:(n=null,o=l);null!==n;)t.push(n),l=o,null!==(n=G())&&null!==(r=gt())?n=[n,r]:(n=null,o=l);null!==t?e=[e,t]:(e=null,o=s)}else e=null,o=s;return null!==e&&(e=function(e){var t;Fn.multi_header||(Fn.multi_header=[]);try{t=new jn(Fn.uri,Fn.display_name,Fn.params),delete Fn.uri,delete Fn.display_name,delete Fn.params}catch(e){t=null}Fn.multi_header.push({possition:o,offset:e,parsed:t})}(i)),null===e&&(o=i),e}function mt(){var e,t,n,r,i;return i=o,null!==(e=null!==(e=vt())?e:"")&&null!==(t=j())&&null!==(n=Q())&&null!==(r=H())?e=[e,t,n,r]:(e=null,o=i),e}function vt(){var e,t,n,r,i,s,l,u;if(i=o,s=o,null!==(e=k())){for(t=[],l=o,null!==(n=E())&&null!==(r=k())?n=[n,r]:(n=null,o=l);null!==n;)t.push(n),l=o,null!==(n=E())&&null!==(r=k())?n=[n,r]:(n=null,o=l);null!==t?e=[e,t]:(e=null,o=s)}else e=null,o=s;return null===e&&(e=Y()),null!==e&&(u=e,e=void(Fn.display_name="string"==typeof u?u:u[1].reduce(function(e,t){return e+t[0]+t[1]},u[0]))),null===e&&(o=i),e}function gt(){var e;return null===(e=yt())&&null===(e=Tt())&&(e=Ct()),e}function yt(){var e,t,r,i,l,u;return i=o,l=o,"q"===n.substr(o,1).toLowerCase()?(e=n.substr(o,1),o++):(e=null,0===s&&a('"q"')),null!==e&&null!==(t=M())&&null!==(r=St())?e=[e,t,r]:(e=null,o=l),null!==e&&(u=e[2],Fn.params||(Fn.params={}),e=void(Fn.params.q=u)),null===e&&(o=i),e}function Tt(){var e,t,r,i,l,u;return i=o,l=o,"expires"===n.substr(o,7).toLowerCase()?(e=n.substr(o,7),o+=7):(e=null,0===s&&a('"expires"')),null!==e&&null!==(t=M())&&null!==(r=bt())?e=[e,t,r]:(e=null,o=l),null!==e&&(u=e[2],Fn.params||(Fn.params={}),e=void(Fn.params.expires=u)),null===e&&(o=i),e}function bt(){var e,t,n;if(n=o,null!==(t=f()))for(e=[];null!==t;)e.push(t),t=f();else e=null;return null!==e&&(e=parseInt(e.join(""))),null===e&&(o=n),e}function St(){var e,t,r,i,l,u,c,h,d;return u=o,c=o,48===n.charCodeAt(o)?(e="0",o++):(e=null,0===s&&a('"0"')),null!==e?(h=o,46===n.charCodeAt(o)?(t=".",o++):(t=null,0===s&&a('"."')),null!==t&&null!==(r=null!==(r=f())?r:"")&&null!==(i=null!==(i=f())?i:"")&&null!==(l=null!==(l=f())?l:"")?t=[t,r,i,l]:(t=null,o=h),null!==(t=null!==t?t:"")?e=[e,t]:(e=null,o=c)):(e=null,o=c),null!==e&&(d=u,e=parseFloat(n.substring(o,d))),null===e&&(o=u),e}function Ct(){var e,t,n,r,i,s,l,u;return r=o,i=o,null!==(e=k())?(s=o,null!==(t=M())&&null!==(n=Et())?t=[t,n]:(t=null,o=s),null!==(t=null!==t?t:"")?e=[e,t]:(e=null,o=i)):(e=null,o=i),null!==e&&(l=e[0],u=e[1],Fn.params||(Fn.params={}),u=void 0===u?void 0:u[1],e=void(Fn.params[l.toLowerCase()]=u)),null===e&&(o=r),e}function Et(){var e;return null===(e=k())&&null===(e=le())&&(e=z()),e}function At(){var e;return"render"===n.substr(o,6).toLowerCase()?(e=n.substr(o,6),o+=6):(e=null,0===s&&a('"render"')),null===e&&("session"===n.substr(o,7).toLowerCase()?(e=n.substr(o,7),o+=7):(e=null,0===s&&a('"session"')),null===e&&("icon"===n.substr(o,4).toLowerCase()?(e=n.substr(o,4),o+=4):(e=null,0===s&&a('"icon"')),null===e&&("alert"===n.substr(o,5).toLowerCase()?(e=n.substr(o,5),o+=5):(e=null,0===s&&a('"alert"')),null===e&&(e=k())))),e}function wt(){var e;return null===(e=Rt())&&(e=Ct()),e}function Rt(){var e,t,r,i;return i=o,"handling"===n.substr(o,8).toLowerCase()?(e=n.substr(o,8),o+=8):(e=null,0===s&&a('"handling"')),null!==e&&null!==(t=M())?("optional"===n.substr(o,8).toLowerCase()?(r=n.substr(o,8),o+=8):(r=null,0===s&&a('"optional"')),null===r&&("required"===n.substr(o,8).toLowerCase()?(r=n.substr(o,8),o+=8):(r=null,0===s&&a('"required"')),null===r&&(r=k())),null!==r?e=[e,t,r]:(e=null,o=i)):(e=null,o=i),e}function It(){var e,t,n,r,i,s,l,u;if(l=o,null!==(e=Ot()))if(null!==(t=D()))if(null!==(n=xt())){for(r=[],u=o,null!==(i=G())&&null!==(s=Dt())?i=[i,s]:(i=null,o=u);null!==i;)r.push(i),u=o,null!==(i=G())&&null!==(s=Dt())?i=[i,s]:(i=null,o=u);null!==r?e=[e,t,n,r]:(e=null,o=l)}else e=null,o=l;else e=null,o=l;else e=null,o=l;return e}function Ot(){var e;return null===(e=Nt())&&(e=kt()),e}function Nt(){var e;return"text"===n.substr(o,4).toLowerCase()?(e=n.substr(o,4),o+=4):(e=null,0===s&&a('"text"')),null===e&&("image"===n.substr(o,5).toLowerCase()?(e=n.substr(o,5),o+=5):(e=null,0===s&&a('"image"')),null===e&&("audio"===n.substr(o,5).toLowerCase()?(e=n.substr(o,5),o+=5):(e=null,0===s&&a('"audio"')),null===e&&("video"===n.substr(o,5).toLowerCase()?(e=n.substr(o,5),o+=5):(e=null,0===s&&a('"video"')),null===e&&("application"===n.substr(o,11).toLowerCase()?(e=n.substr(o,11),o+=11):(e=null,0===s&&a('"application"')),null===e&&(e=Pt()))))),e}function kt(){var e;return"message"===n.substr(o,7).toLowerCase()?(e=n.substr(o,7),o+=7):(e=null,0===s&&a('"message"')),null===e&&("multipart"===n.substr(o,9).toLowerCase()?(e=n.substr(o,9),o+=9):(e=null,0===s&&a('"multipart"')),null===e&&(e=Pt())),e}function Pt(){var e;return null===(e=k())&&(e=Ut()),e}function Ut(){var e,t,r;return r=o,"x-"===n.substr(o,2).toLowerCase()?(e=n.substr(o,2),o+=2):(e=null,0===s&&a('"x-"')),null!==e&&null!==(t=k())?e=[e,t]:(e=null,o=r),e}function xt(){var e;return null===(e=Pt())&&(e=k()),e}function Dt(){var e,t,n,r;return r=o,null!==(e=k())&&null!==(t=M())&&null!==(n=Mt())?e=[e,t,n]:(e=null,o=r),e}function Mt(){var e;return null===(e=k())&&(e=z()),e}function qt(){var e,t,n,r;if(n=o,null!==(t=f()))for(e=[];null!==t;)e.push(t),t=f();else e=null;return null!==e&&(r=e,e=void(Fn.value=parseInt(r.join("")))),null===e&&(o=n),e}function Lt(){var e,t,r,i,l,u;if(l=o,null!==(e=P())){for(t=[],u=o,46===n.charCodeAt(o)?(r=".",o++):(r=null,0===s&&a('"."')),null!==r&&null!==(i=P())?r=[r,i]:(r=null,o=u);null!==r;)t.push(r),u=o,46===n.charCodeAt(o)?(r=".",o++):(r=null,0===s&&a('"."')),null!==r&&null!==(i=P())?r=[r,i]:(r=null,o=u);null!==t?e=[e,t]:(e=null,o=l)}else e=null,o=l;return e}function Ht(){var e;return null===(e=jt())&&(e=Ct()),e}function jt(){var e,t,r,i,l,u;return i=o,l=o,"tag"===n.substr(o,3).toLowerCase()?(e=n.substr(o,3),o+=3):(e=null,0===s&&a('"tag"')),null!==e&&null!==(t=M())&&null!==(r=k())?e=[e,t,r]:(e=null,o=l),null!==e&&(u=e[2],e=void(Fn.tag=u)),null===e&&(o=i),e}function Ft(){var e,t,r,i,l,u,c,f;if(c=o,"digest"===n.substr(o,6).toLowerCase()?(e=n.substr(o,6),o+=6):(e=null,0===s&&a('"Digest"')),null!==e)if(null!==(t=E()))if(null!==(r=Wt())){for(i=[],f=o,null!==(l=F())&&null!==(u=Wt())?l=[l,u]:(l=null,o=f);null!==l;)i.push(l),f=o,null!==(l=F())&&null!==(u=Wt())?l=[l,u]:(l=null,o=f);null!==i?e=[e,t,r,i]:(e=null,o=c)}else e=null,o=c;else e=null,o=c;else e=null,o=c;return null===e&&(e=Gt()),e}function Gt(){var e,t,n,r,i,s,l,u;if(l=o,null!==(e=k()))if(null!==(t=E()))if(null!==(n=Bt())){for(r=[],u=o,null!==(i=F())&&null!==(s=Bt())?i=[i,s]:(i=null,o=u);null!==i;)r.push(i),u=o,null!==(i=F())&&null!==(s=Bt())?i=[i,s]:(i=null,o=u);null!==r?e=[e,t,n,r]:(e=null,o=l)}else e=null,o=l;else e=null,o=l;else e=null,o=l;return e}function Bt(){var e,t,n,r;return r=o,null!==(e=k())&&null!==(t=M())?(null===(n=k())&&(n=z()),null!==n?e=[e,t,n]:(e=null,o=r)):(e=null,o=r),e}function Wt(){var e;return null===(e=Vt())&&null===(e=zt())&&null===(e=$t())&&null===(e=Xt())&&null===(e=Qt())&&null===(e=Zt())&&null===(e=en())&&(e=Bt()),e}function Vt(){var e,t,r,i;return i=o,"realm"===n.substr(o,5).toLowerCase()?(e=n.substr(o,5),o+=5):(e=null,0===s&&a('"realm"')),null!==e&&null!==(t=M())&&null!==(r=Kt())?e=[e,t,r]:(e=null,o=i),e}function Kt(){var e,t,n;return t=o,null!==(e=Y())&&(n=e,e=void(Fn.realm=n)),null===e&&(o=t),e}function zt(){var e,t,r,i,l,u,c,f,h;if(f=o,"domain"===n.substr(o,6).toLowerCase()?(e=n.substr(o,6),o+=6):(e=null,0===s&&a('"domain"')),null!==e)if(null!==(t=M()))if(null!==(r=W()))if(null!==(i=Yt())){if(l=[],h=o,null!==(c=v()))for(u=[];null!==c;)u.push(c),c=v();else u=null;for(null!==u&&null!==(c=Yt())?u=[u,c]:(u=null,o=h);null!==u;){if(l.push(u),h=o,null!==(c=v()))for(u=[];null!==c;)u.push(c),c=v();else u=null;null!==u&&null!==(c=Yt())?u=[u,c]:(u=null,o=h)}null!==l&&null!==(u=V())?e=[e,t,r,i,l,u]:(e=null,o=f)}else e=null,o=f;else e=null,o=f;else e=null,o=f;else e=null,o=f;return e}function Yt(){var e;return null===(e=Le())&&(e=Fe()),e}function $t(){var e,t,r,i;return i=o,"nonce"===n.substr(o,5).toLowerCase()?(e=n.substr(o,5),o+=5):(e=null,0===s&&a('"nonce"')),null!==e&&null!==(t=M())&&null!==(r=Jt())?e=[e,t,r]:(e=null,o=i),e}function Jt(){var e,t,n;return t=o,null!==(e=Y())&&(n=e,e=void(Fn.nonce=n)),null===e&&(o=t),e}function Xt(){var e,t,r,i,l,u;return i=o,l=o,"opaque"===n.substr(o,6).toLowerCase()?(e=n.substr(o,6),o+=6):(e=null,0===s&&a('"opaque"')),null!==e&&null!==(t=M())&&null!==(r=Y())?e=[e,t,r]:(e=null,o=l),null!==e&&(u=e[2],e=void(Fn.opaque=u)),null===e&&(o=i),e}function Qt(){var e,t,r,i,l;return i=o,"stale"===n.substr(o,5).toLowerCase()?(e=n.substr(o,5),o+=5):(e=null,0===s&&a('"stale"')),null!==e&&null!==(t=M())?(l=o,"true"===n.substr(o,4).toLowerCase()?(r=n.substr(o,4),o+=4):(r=null,0===s&&a('"true"')),null!==r&&(r=void(Fn.stale=!0)),null===r&&(o=l),null===r&&(l=o,"false"===n.substr(o,5).toLowerCase()?(r=n.substr(o,5),o+=5):(r=null,0===s&&a('"false"')),null!==r&&(r=void(Fn.stale=!1)),null===r&&(o=l)),null!==r?e=[e,t,r]:(e=null,o=i)):(e=null,o=i),e}function Zt(){var e,t,r,i,l,u;return i=o,l=o,"algorithm"===n.substr(o,9).toLowerCase()?(e=n.substr(o,9),o+=9):(e=null,0===s&&a('"algorithm"')),null!==e&&null!==(t=M())?("md5"===n.substr(o,3).toLowerCase()?(r=n.substr(o,3),o+=3):(r=null,0===s&&a('"MD5"')),null===r&&("md5-sess"===n.substr(o,8).toLowerCase()?(r=n.substr(o,8),o+=8):(r=null,0===s&&a('"MD5-sess"')),null===r&&(r=k())),null!==r?e=[e,t,r]:(e=null,o=l)):(e=null,o=l),null!==e&&(u=e[2],e=void(Fn.algorithm=u.toUpperCase())),null===e&&(o=i),e}function en(){var e,t,r,i,l,u,c,f,h,d;if(f=o,"qop"===n.substr(o,3).toLowerCase()?(e=n.substr(o,3),o+=3):(e=null,0===s&&a('"qop"')),null!==e)if(null!==(t=M()))if(null!==(r=W())){if(h=o,null!==(i=tn())){for(l=[],d=o,44===n.charCodeAt(o)?(u=",",o++):(u=null,0===s&&a('","')),null!==u&&null!==(c=tn())?u=[u,c]:(u=null,o=d);null!==u;)l.push(u),d=o,44===n.charCodeAt(o)?(u=",",o++):(u=null,0===s&&a('","')),null!==u&&null!==(c=tn())?u=[u,c]:(u=null,o=d);null!==l?i=[i,l]:(i=null,o=h)}else i=null,o=h;null!==i&&null!==(l=V())?e=[e,t,r,i,l]:(e=null,o=f)}else e=null,o=f;else e=null,o=f;else e=null,o=f;return e}function tn(){var e,t,r;return t=o,"auth-int"===n.substr(o,8).toLowerCase()?(e=n.substr(o,8),o+=8):(e=null,0===s&&a('"auth-int"')),null===e&&("auth"===n.substr(o,4).toLowerCase()?(e=n.substr(o,4),o+=4):(e=null,0===s&&a('"auth"')),null===e&&(e=k())),null!==e&&(r=e,Fn.qop||(Fn.qop=[]),e=void Fn.qop.push(r.toLowerCase())),null===e&&(o=t),e}function nn(){var e,t,n,r,i,s,l;if(i=o,s=o,null!==(e=mt())){for(t=[],l=o,null!==(n=G())&&null!==(r=Ct())?n=[n,r]:(n=null,o=l);null!==n;)t.push(n),l=o,null!==(n=G())&&null!==(r=Ct())?n=[n,r]:(n=null,o=l);null!==t?e=[e,t]:(e=null,o=s)}else e=null,o=s;return null!==e&&(e=function(e){var t;Fn.multi_header||(Fn.multi_header=[]);try{t=new jn(Fn.uri,Fn.display_name,Fn.params),delete Fn.uri,delete Fn.display_name,delete Fn.params}catch(e){t=null}Fn.multi_header.push({possition:o,offset:e,parsed:t})}(i)),null===e&&(o=i),e}function rn(){var e;return null===(e=on())&&(e=Ct()),e}function on(){var e,t,r,i,l,u,c;if(l=o,u=o,"cause"===n.substr(o,5).toLowerCase()?(e=n.substr(o,5),o+=5):(e=null,0===s&&a('"cause"')),null!==e)if(null!==(t=M())){if(null!==(i=f()))for(r=[];null!==i;)r.push(i),i=f();else r=null;null!==r?e=[e,t,r]:(e=null,o=u)}else e=null,o=u;else e=null,o=u;return null!==e&&(c=e[2],e=void(Fn.cause=parseInt(c.join("")))),null===e&&(o=l),e}function sn(){var e,t,n,r,i,s;if(i=o,null!==(e=mt())){for(t=[],s=o,null!==(n=G())&&null!==(r=Ct())?n=[n,r]:(n=null,o=s);null!==n;)t.push(n),s=o,null!==(n=G())&&null!==(r=Ct())?n=[n,r]:(n=null,o=s);null!==t?e=[e,t]:(e=null,o=i)}else e=null,o=i;return e}function ln(){var e,t,r;return t=o,"active"===n.substr(o,6).toLowerCase()?(e=n.substr(o,6),o+=6):(e=null,0===s&&a('"active"')),null===e&&("pending"===n.substr(o,7).toLowerCase()?(e=n.substr(o,7),o+=7):(e=null,0===s&&a('"pending"')),null===e&&("terminated"===n.substr(o,10).toLowerCase()?(e=n.substr(o,10),o+=10):(e=null,0===s&&a('"terminated"')),null===e&&(e=k()))),null!==e&&(r=t,e=void(Fn.state=n.substring(o,r))),null===e&&(o=t),e}function un(){var e,t,r,i,l,u,c,f;return i=o,l=o,"reason"===n.substr(o,6).toLowerCase()?(e=n.substr(o,6),o+=6):(e=null,0===s&&a('"reason"')),null!==e&&null!==(t=M())&&null!==(r=an())?e=[e,t,r]:(e=null,o=l),null!==e&&(e=void(void 0!==(u=e[2])&&(Fn.reason=u))),null===e&&(o=i),null===e&&(i=o,l=o,"expires"===n.substr(o,7).toLowerCase()?(e=n.substr(o,7),o+=7):(e=null,0===s&&a('"expires"')),null!==e&&null!==(t=M())&&null!==(r=bt())?e=[e,t,r]:(e=null,o=l),null!==e&&(e=void(void 0!==(f=e[2])&&(Fn.expires=f))),null===e&&(o=i),null===e&&(i=o,l=o,"retry_after"===n.substr(o,11).toLowerCase()?(e=n.substr(o,11),o+=11):(e=null,0===s&&a('"retry_after"')),null!==e&&null!==(t=M())&&null!==(r=bt())?e=[e,t,r]:(e=null,o=l),null!==e&&(e=void(void 0!==(c=e[2])&&(Fn.retry_after=c))),null===e&&(o=i),null===e&&(e=Ct()))),e}function an(){var e;return"deactivated"===n.substr(o,11).toLowerCase()?(e=n.substr(o,11),o+=11):(e=null,0===s&&a('"deactivated"')),null===e&&("probation"===n.substr(o,9).toLowerCase()?(e=n.substr(o,9),o+=9):(e=null,0===s&&a('"probation"')),null===e&&("rejected"===n.substr(o,8).toLowerCase()?(e=n.substr(o,8),o+=8):(e=null,0===s&&a('"rejected"')),null===e&&("timeout"===n.substr(o,7).toLowerCase()?(e=n.substr(o,7),o+=7):(e=null,0===s&&a('"timeout"')),null===e&&("giveup"===n.substr(o,6).toLowerCase()?(e=n.substr(o,6),o+=6):(e=null,0===s&&a('"giveup"')),null===e&&("noresource"===n.substr(o,10).toLowerCase()?(e=n.substr(o,10),o+=10):(e=null,0===s&&a('"noresource"')),null===e&&("invariant"===n.substr(o,9).toLowerCase()?(e=n.substr(o,9),o+=9):(e=null,0===s&&a('"invariant"')),null===e&&(e=k()))))))),e}function cn(){var e;return null===(e=jt())&&(e=Ct()),e}function fn(){var e,t,n,r,i,s,l,u;if(l=o,null!==(e=yn()))if(null!==(t=E()))if(null!==(n=Sn())){for(r=[],u=o,null!==(i=G())&&null!==(s=hn())?i=[i,s]:(i=null,o=u);null!==i;)r.push(i),u=o,null!==(i=G())&&null!==(s=hn())?i=[i,s]:(i=null,o=u);null!==r?e=[e,t,n,r]:(e=null,o=l)}else e=null,o=l;else e=null,o=l;else e=null,o=l;return e}function hn(){var e;return null===(e=dn())&&null===(e=_n())&&null===(e=pn())&&null===(e=mn())&&null===(e=vn())&&(e=Ct()),e}function dn(){var e,t,r,i,l,u;return i=o,l=o,"ttl"===n.substr(o,3).toLowerCase()?(e=n.substr(o,3),o+=3):(e=null,0===s&&a('"ttl"')),null!==e&&null!==(t=M())&&null!==(r=An())?e=[e,t,r]:(e=null,o=l),null!==e&&(u=e[2],e=void(Fn.ttl=u)),null===e&&(o=i),e}function _n(){var e,t,r,i,l,u;return i=o,l=o,"maddr"===n.substr(o,5).toLowerCase()?(e=n.substr(o,5),o+=5):(e=null,0===s&&a('"maddr"')),null!==e&&null!==(t=M())&&null!==(r=le())?e=[e,t,r]:(e=null,o=l),null!==e&&(u=e[2],e=void(Fn.maddr=u)),null===e&&(o=i),e}function pn(){var e,t,r,i,l,u;return i=o,l=o,"received"===n.substr(o,8).toLowerCase()?(e=n.substr(o,8),o+=8):(e=null,0===s&&a('"received"')),null!==e&&null!==(t=M())?(null===(r=pe())&&(r=he()),null!==r?e=[e,t,r]:(e=null,o=l)):(e=null,o=l),null!==e&&(u=e[2],e=void(Fn.received=u)),null===e&&(o=i),e}function mn(){var e,t,r,i,l,u;return i=o,l=o,"branch"===n.substr(o,6).toLowerCase()?(e=n.substr(o,6),o+=6):(e=null,0===s&&a('"branch"')),null!==e&&null!==(t=M())&&null!==(r=k())?e=[e,t,r]:(e=null,o=l),null!==e&&(u=e[2],e=void(Fn.branch=u)),null===e&&(o=i),e}function vn(){var e,t,r,i,l;return i=o,"rport"===n.substr(o,5).toLowerCase()?(e=n.substr(o,5),o+=5):(e=null,0===s&&a('"rport"')),null!==e?(l=o,null!==(t=M())&&null!==(r=gn())?t=[t,r]:(t=null,o=l),null!==(t=null!==t?t:"")?e=[e,t]:(e=null,o=i)):(e=null,o=i),e}function gn(){var e,t,n,r,i,s,l,u;return s=o,l=o,null!==(e=null!==(e=f())?e:"")&&null!==(t=null!==(t=f())?t:"")&&null!==(n=null!==(n=f())?n:"")&&null!==(r=null!==(r=f())?r:"")&&null!==(i=null!==(i=f())?i:"")?e=[e,t,n,r,i]:(e=null,o=l),null!==e&&(u=e,e=void(Fn.rport=parseInt(u.join("")))),null===e&&(o=s),e}function yn(){var e,t,n,r,i,s;return s=o,null!==(e=Tn())&&null!==(t=D())&&null!==(n=k())&&null!==(r=D())&&null!==(i=bn())?e=[e,t,n,r,i]:(e=null,o=s),e}function Tn(){var e,t,r;return t=o,"sip"===n.substr(o,3).toLowerCase()?(e=n.substr(o,3),o+=3):(e=null,0===s&&a('"SIP"')),null===e&&(e=k()),null!==e&&(r=e,e=void(Fn.protocol=r)),null===e&&(o=t),e}function bn(){var e,t,r;return t=o,"udp"===n.substr(o,3).toLowerCase()?(e=n.substr(o,3),o+=3):(e=null,0===s&&a('"UDP"')),null===e&&("tcp"===n.substr(o,3).toLowerCase()?(e=n.substr(o,3),o+=3):(e=null,0===s&&a('"TCP"')),null===e&&("tls"===n.substr(o,3).toLowerCase()?(e=n.substr(o,3),o+=3):(e=null,0===s&&a('"TLS"')),null===e&&("sctp"===n.substr(o,4).toLowerCase()?(e=n.substr(o,4),o+=4):(e=null,0===s&&a('"SCTP"')),null===e&&(e=k())))),null!==e&&(r=e,e=void(Fn.transport=r)),null===e&&(o=t),e}function Sn(){var e,t,n,r,i;return r=o,null!==(e=Cn())?(i=o,null!==(t=B())&&null!==(n=En())?t=[t,n]:(t=null,o=i),null!==(t=null!==t?t:"")?e=[e,t]:(e=null,o=r)):(e=null,o=r),e}function Cn(){var e,t,r;return t=o,null===(e=pe())&&null===(e=fe())&&(e=ue()),null!==e&&(r=t,e=void(Fn.host=n.substring(o,r))),null===e&&(o=t),e}function En(){var e,t,n,r,i,s,l,u;return s=o,l=o,null!==(e=null!==(e=f())?e:"")&&null!==(t=null!==(t=f())?t:"")&&null!==(n=null!==(n=f())?n:"")&&null!==(r=null!==(r=f())?r:"")&&null!==(i=null!==(i=f())?i:"")?e=[e,t,n,r,i]:(e=null,o=l),null!==e&&(u=e,e=void(Fn.port=parseInt(u.join("")))),null===e&&(o=s),e}function An(){var e,t,n,r,i;return r=o,i=o,null!==(e=f())&&null!==(t=null!==(t=f())?t:"")&&null!==(n=null!==(n=f())?n:"")?e=[e,t,n]:(e=null,o=i),null!==e&&(e=parseInt(e.join(""))),null===e&&(o=r),e}function wn(){var e,t,n;return t=o,null!==(e=bt())&&(n=e,e=void(Fn.expires=n)),null===e&&(o=t),e}function Rn(){var e;return null===(e=In())&&(e=Ct()),e}function In(){var e,t,r,i,l,u;return i=o,l=o,"refresher"===n.substr(o,9).toLowerCase()?(e=n.substr(o,9),o+=9):(e=null,0===s&&a('"refresher"')),null!==e&&null!==(t=M())?("uac"===n.substr(o,3).toLowerCase()?(r=n.substr(o,3),o+=3):(r=null,0===s&&a('"uac"')),null===r&&("uas"===n.substr(o,3).toLowerCase()?(r=n.substr(o,3),o+=3):(r=null,0===s&&a('"uas"'))),null!==r?e=[e,t,r]:(e=null,o=l)):(e=null,o=l),null!==e&&(u=e[2],e=void(Fn.refresher=u.toLowerCase())),null===e&&(o=i),e}function On(){var e,t;for(e=[],null===(t=I())&&null===(t=N())&&(t=E());null!==t;)e.push(t),null===(t=I())&&null===(t=N())&&(t=E());return e}function Nn(){var e,t,r,i,l,u,c,f,h,d,_,p;return d=o,_=o,null!==(e=Pn())?(45===n.charCodeAt(o)?(t="-",o++):(t=null,0===s&&a('"-"')),null!==t&&null!==(r=kn())?(45===n.charCodeAt(o)?(i="-",o++):(i=null,0===s&&a('"-"')),null!==i&&null!==(l=kn())?(45===n.charCodeAt(o)?(u="-",o++):(u=null,0===s&&a('"-"')),null!==u&&null!==(c=kn())?(45===n.charCodeAt(o)?(f="-",o++):(f=null,0===s&&a('"-"')),null!==f&&null!==(h=Un())?e=[e,t,r,i,l,u,c,f,h]:(e=null,o=_)):(e=null,o=_)):(e=null,o=_)):(e=null,o=_)):(e=null,o=_),null!==e&&(p=d,e[0],e=void(Fn=n.substring(o+5,p))),null===e&&(o=d),e}function kn(){var e,t,n,r,i;return i=o,null!==(e=d())&&null!==(t=d())&&null!==(n=d())&&null!==(r=d())?e=[e,t,n,r]:(e=null,o=i),e}function Pn(){var e,t,n;return n=o,null!==(e=kn())&&null!==(t=kn())?e=[e,t]:(e=null,o=n),e}function Un(){var e,t,n,r;return r=o,null!==(e=kn())&&null!==(t=kn())&&null!==(n=kn())?e=[e,t,n]:(e=null,o=r),e}function xn(){var e,t,r,i,l,u,c;return i=o,l=o,null!==(e=U())?(u=o,64===n.charCodeAt(o)?(t="@",o++):(t=null,0===s&&a('"@"')),null!==t&&null!==(r=U())?t=[t,r]:(t=null,o=u),null!==(t=null!==t?t:"")?e=[e,t]:(e=null,o=l)):(e=null,o=l),null!==e&&(c=i,e=void(Fn.call_id=n.substring(o,c))),null===e&&(o=i),e}function Dn(){var e;return null===(e=Mn())&&null===(e=qn())&&null===(e=Ln())&&(e=Ct()),e}function Mn(){var e,t,r,i,l,u;return i=o,l=o,"to-tag"===n.substr(o,6)?(e="to-tag",o+=6):(e=null,0===s&&a('"to-tag"')),null!==e&&null!==(t=M())&&null!==(r=k())?e=[e,t,r]:(e=null,o=l),null!==e&&(u=e[2],e=void(Fn.to_tag=u)),null===e&&(o=i),e}function qn(){var e,t,r,i,l,u;return i=o,l=o,"from-tag"===n.substr(o,8)?(e="from-tag",o+=8):(e=null,0===s&&a('"from-tag"')),null!==e&&null!==(t=M())&&null!==(r=k())?e=[e,t,r]:(e=null,o=l),null!==e&&(u=e[2],e=void(Fn.from_tag=u)),null===e&&(o=i),e}function Ln(){var e,t;return t=o,"early-only"===n.substr(o,10)?(e="early-only",o+=10):(e=null,0===s&&a('"early-only"')),null!==e&&(e=void(Fn.early_only=!0)),null===e&&(o=t),e}var Hn=e("./URI"),jn=e("./NameAddrHeader"),Fn={};if(null===i[r]()||o!==n.length){var Gn=Math.max(o,l),Bn=Gn2&&void 0!==arguments[2]?arguments[2]:{},i=e;if(void 0===e||void 0===t)throw new TypeError("Not enough arguments");if(!(e=this._ua.normalizeTarget(e)))throw new TypeError("Invalid target: ".concat(i));var o=d.cloneArray(r.extraHeaders),s=d.cloneObject(r.eventHandlers),l=r.contentType||"text/plain",u={};for(var a in r.fromUserName&&(u.from_uri=new m("sip",r.fromUserName,this._ua.configuration.uri.host),o.push("P-Preferred-Identity: ".concat(this._ua.configuration.uri.toString()))),r.fromDisplayName&&(u.from_display_name=r.fromDisplayName),s)Object.prototype.hasOwnProperty.call(s,a)&&this.on(a,s[a]);o.push("Content-Type: ".concat(l)),this._request=new h.OutgoingRequest(f.MESSAGE,e,this._ua,u,o),t&&(this._request.body=t);var c=new _(this._ua,this._request,{onRequestTimeout:function(){n._onRequestTimeout()},onTransportError:function(){n._onTransportError()},onReceiveResponse:function(e){n._receiveResponse(e)}});this._newMessage("local",this._request),c.send()}},{key:"init_incoming",value:function(e){this._request=e,this._newMessage("remote",e),this._is_replied||(this._is_replied=!0,e.reply(200)),this._close()}},{key:"accept",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=d.cloneArray(e.extraHeaders),n=e.body;if("incoming"!==this._direction)throw new p.NotSupportedError('"accept" not supported for outgoing Message');if(this._is_replied)throw new Error("incoming Message already replied");this._is_replied=!0,this._request.reply(200,null,t,n)}},{key:"reject",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.status_code||480,n=e.reason_phrase,r=d.cloneArray(e.extraHeaders),i=e.body;if("incoming"!==this._direction)throw new p.NotSupportedError('"reject" not supported for outgoing Message');if(this._is_replied)throw new Error("incoming Message already replied");if(t<300||t>=700)throw new TypeError("Invalid status_code: ".concat(t));this._is_replied=!0,this._request.reply(t,n,r,i)}},{key:"_receiveResponse",value:function(e){if(!this._closed)switch(!0){case/^1[0-9]{2}$/.test(e.status_code):break;case/^2[0-9]{2}$/.test(e.status_code):this._succeeded("remote",e);break;default:var t=d.sipErrorCause(e.status_code);this._failed("remote",e,t)}}},{key:"_onRequestTimeout",value:function(){this._closed||this._failed("system",null,f.causes.REQUEST_TIMEOUT)}},{key:"_onTransportError",value:function(){this._closed||this._failed("system",null,f.causes.CONNECTION_ERROR)}},{key:"_close",value:function(){this._closed=!0,this._ua.destroyMessage(this)}},{key:"_newMessage",value:function(e,t){"remote"===e?(this._direction="incoming",this._local_identity=t.to,this._remote_identity=t.from):"local"===e&&(this._direction="outgoing",this._local_identity=t.from,this._remote_identity=t.to),this._ua.newMessage(this,{originator:e,message:this,request:t})}},{key:"_failed",value:function(e,t,n){v.debug("MESSAGE failed"),this._close(),v.debug('emit "failed"'),this.emit("failed",{originator:e,response:t||null,cause:n})}},{key:"_succeeded",value:function(e,t){v.debug("MESSAGE succeeded"),this._close(),v.debug('emit "succeeded"'),this.emit("succeeded",{originator:e,response:t})}}])&&i(n.prototype,r),o&&i(n,o),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r,o}()},{"./Constants":2,"./Exceptions":6,"./Logger":9,"./RequestSender":20,"./SIPMessage":21,"./URI":27,"./Utils":28,events:31}],11:[function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t){for(var n=0;n"),this._parameters)Object.prototype.hasOwnProperty.call(this._parameters,t)&&(e+=";".concat(t),null!==this._parameters[t]&&(e+="=".concat(this._parameters[t])));return e}}])&&i(t.prototype,n),r&&i(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,n,r}()},{"./Grammar":7,"./URI":27}],12:[function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},i=e;if(void 0===e)throw new TypeError("A target is required for OPTIONS");if(!(e=this._ua.normalizeTarget(e)))throw new TypeError("Invalid target: ".concat(i));var o=d.cloneArray(r.extraHeaders),s=d.cloneObject(r.eventHandlers),l=r.contentType||"application/sdp";for(var u in s)Object.prototype.hasOwnProperty.call(s,u)&&this.on(u,s[u]);o.push("Content-Type: ".concat(l)),this._request=new h.OutgoingRequest(f.OPTIONS,e,this._ua,null,o),t&&(this._request.body=t);var a=new _(this._ua,this._request,{onRequestTimeout:function(){n._onRequestTimeout()},onTransportError:function(){n._onTransportError()},onReceiveResponse:function(e){n._receiveResponse(e)}});this._newOptions("local",this._request),a.send()}},{key:"init_incoming",value:function(e){this._request=e,this._newOptions("remote",e),this._is_replied||(this._is_replied=!0,e.reply(200)),this._close()}},{key:"accept",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=d.cloneArray(e.extraHeaders),n=e.body;if("incoming"!==this._direction)throw new p.NotSupportedError('"accept" not supported for outgoing Options');if(this._is_replied)throw new Error("incoming Options already replied");this._is_replied=!0,this._request.reply(200,null,t,n)}},{key:"reject",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.status_code||480,n=e.reason_phrase,r=d.cloneArray(e.extraHeaders),i=e.body;if("incoming"!==this._direction)throw new p.NotSupportedError('"reject" not supported for outgoing Options');if(this._is_replied)throw new Error("incoming Options already replied");if(t<300||t>=700)throw new TypeError("Invalid status_code: ".concat(t));this._is_replied=!0,this._request.reply(t,n,r,i)}},{key:"_receiveResponse",value:function(e){if(!this._closed)switch(!0){case/^1[0-9]{2}$/.test(e.status_code):break;case/^2[0-9]{2}$/.test(e.status_code):this._succeeded("remote",e);break;default:var t=d.sipErrorCause(e.status_code);this._failed("remote",e,t)}}},{key:"_onRequestTimeout",value:function(){this._closed||this._failed("system",null,f.causes.REQUEST_TIMEOUT)}},{key:"_onTransportError",value:function(){this._closed||this._failed("system",null,f.causes.CONNECTION_ERROR)}},{key:"_close",value:function(){this._closed=!0,this._ua.destroyMessage(this)}},{key:"_newOptions",value:function(e,t){"remote"===e?(this._direction="incoming",this._local_identity=t.to,this._remote_identity=t.from):"local"===e&&(this._direction="outgoing",this._local_identity=t.from,this._remote_identity=t.to),this._ua.newOptions(this,{originator:e,message:this,request:t})}},{key:"_failed",value:function(e,t,n){m.debug("OPTIONS failed"),this._close(),m.debug('emit "failed"'),this.emit("failed",{originator:e,response:t||null,cause:n})}},{key:"_succeeded",value:function(e,t){m.debug("OPTIONS succeeded"),this._close(),m.debug('emit "succeeded"'),this.emit("succeeded",{originator:e,response:t})}}])&&i(n.prototype,r),o&&i(n,o),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r,o}()},{"./Constants":2,"./Exceptions":6,"./Logger":9,"./RequestSender":20,"./SIPMessage":21,"./Utils":28,events:31}],13:[function(e,t,n){"use strict";function r(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return i(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?i(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var s,l=!0,u=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return l=e.done,e},e:function(e){u=!0,s=e},f:function(){try{l||null==n.return||n.return()}finally{if(u)throw s}}}}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var s,l=!0,u=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return l=e.done,e},e:function(e){u=!0,s=e},f:function(){try{l||null==n.return||n.return()}finally{if(u)throw s}}}}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0;R.debug("connect()");var r=e,i=v.cloneObject(t.eventHandlers),o=v.cloneArray(t.extraHeaders),s=v.cloneObject(t.mediaConstraints,{audio:!0,video:!0}),l=t.mediaStream||null,u=v.cloneObject(t.pcConfig,{iceServers:[]}),a=t.rtcConstraints||null,c=t.rtcOfferConstraints||null;if(this._rtcOfferConstraints=c,this._rtcAnswerConstraints=t.rtcAnswerConstraints||null,this._data=t.data||this._data,void 0===e)throw new TypeError("Not enough arguments");if(this._status!==I.STATUS_NULL)throw new p.InvalidStateError(this._status);if(!window.RTCPeerConnection)throw new p.NotSupportedError("WebRTC not supported");if(!(e=this._ua.normalizeTarget(e)))throw new TypeError("Invalid target: ".concat(r));for(var f in this._sessionTimers.enabled&&v.isDecimal(t.sessionTimersExpires)&&(t.sessionTimersExpires>=_.MIN_SESSION_EXPIRES?this._sessionTimers.defaultExpires=t.sessionTimersExpires:this._sessionTimers.defaultExpires=_.SESSION_EXPIRES),i)Object.prototype.hasOwnProperty.call(i,f)&&this.on(f,i[f]);this._from_tag=v.newTag();var h=t.anonymous||!1,d={from_tag:this._from_tag};this._contact=this._ua.contact.toString({anonymous:h,outbound:!0}),h?(d.from_display_name="Anonymous",d.from_uri=new w("sip","anonymous","anonymous.invalid"),o.push("P-Preferred-Identity: ".concat(this._ua.configuration.uri.toString())),o.push("Privacy: id")):t.fromUserName&&(d.from_uri=new w("sip",t.fromUserName,this._ua.configuration.uri.host),o.push("P-Preferred-Identity: ".concat(this._ua.configuration.uri.toString()))),t.fromDisplayName&&(d.from_display_name=t.fromDisplayName),o.push("Contact: ".concat(this._contact)),o.push("Content-Type: application/sdp"),this._sessionTimers.enabled&&o.push("Session-Expires: ".concat(this._sessionTimers.defaultExpires).concat(this._ua.configuration.session_timers_force_refresher?";refresher=uac":"")),this._request=new y.InitialOutgoingInviteRequest(e,this._ua,d,o),this._id=this._request.call_id+this._from_tag,this._createRTCConnection(u,a),this._direction="outgoing",this._local_identity=this._request.from,this._remote_identity=this._request.to,n&&n(this),this._newRTCSession("local",this._request),this._sendInitialRequest(s,c,l)}},{key:"init_incoming",value:function(e,t){var n,r=this;R.debug("init_incoming()");var i=e.hasHeader("Content-Type")?e.getHeader("Content-Type").toLowerCase():void 0;e.body&&"application/sdp"!==i?e.reply(415):(this._status=I.STATUS_INVITE_RECEIVED,this._from_tag=e.from_tag,this._id=e.call_id+this._from_tag,this._request=e,this._contact=this._ua.contact.toString(),e.hasHeader("expires")&&(n=1e3*e.getHeader("expires")),e.to_tag=v.newTag(),this._createDialog(e,"UAS",!0)?(e.body?this._late_sdp=!1:this._late_sdp=!0,this._status=I.STATUS_WAITING_FOR_ANSWER,this._timers.userNoAnswerTimer=setTimeout(function(){e.reply(408),r._failed("local",null,_.causes.NO_ANSWER)},this._ua.configuration.no_answer_timeout),n&&(this._timers.expiresTimer=setTimeout(function(){r._status===I.STATUS_WAITING_FOR_ANSWER&&(e.reply(487),r._failed("system",null,_.causes.EXPIRES))},n)),this._direction="incoming",this._local_identity=e.to,this._remote_identity=e.from,t&&t(this),this._newRTCSession("remote",e),this._status!==I.STATUS_TERMINATED&&(e.reply(180,null,["Contact: ".concat(this._contact)]),this._progress("local",null))):e.reply(500,"Missing Contact header field"))}},{key:"answer",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};R.debug("answer()");var n=this._request,r=v.cloneArray(t.extraHeaders),o=v.cloneObject(t.mediaConstraints),s=t.mediaStream||null,l=v.cloneObject(t.pcConfig,{iceServers:[]}),u=t.rtcConstraints||null,a=t.rtcAnswerConstraints||null,c=v.cloneObject(t.rtcOfferConstraints),f=!1,h=!1,d=!1,m=!1;if(this._rtcAnswerConstraints=a,this._rtcOfferConstraints=t.rtcOfferConstraints||null,this._data=t.data||this._data,"incoming"!==this._direction)throw new p.NotSupportedError('"answer" not supported for outgoing RTCSession');if(this._status!==I.STATUS_WAITING_FOR_ANSWER)throw new p.InvalidStateError(this._status);if(this._sessionTimers.enabled&&v.isDecimal(t.sessionTimersExpires)&&(t.sessionTimersExpires>=_.MIN_SESSION_EXPIRES?this._sessionTimers.defaultExpires=t.sessionTimersExpires:this._sessionTimers.defaultExpires=_.SESSION_EXPIRES),this._status=I.STATUS_ANSWERED,this._createDialog(n,"UAS")){clearTimeout(this._timers.userNoAnswerTimer),r.unshift("Contact: ".concat(this._contact));var g=n.parseSDP();Array.isArray(g.media)||(g.media=[g.media]);var y,T=i(g.media);try{for(T.s();!(y=T.n()).done;){var b=y.value;"audio"===b.type&&(f=!0,b.direction&&"sendrecv"!==b.direction||(d=!0)),"video"===b.type&&(h=!0,b.direction&&"sendrecv"!==b.direction||(m=!0))}}catch(e){T.e(e)}finally{T.f()}if(s&&!1===o.audio){var S,C=i(s.getAudioTracks());try{for(C.s();!(S=C.n()).done;){var E=S.value;s.removeTrack(E)}}catch(e){C.e(e)}finally{C.f()}}if(s&&!1===o.video){var A,w=i(s.getVideoTracks());try{for(w.s();!(A=w.n()).done;){var O=A.value;s.removeTrack(O)}}catch(e){w.e(e)}finally{w.f()}}s||void 0!==o.audio||(o.audio=d),s||void 0!==o.video||(o.video=m),s||f||c.offerToReceiveAudio||(o.audio=!1),s||h||c.offerToReceiveVideo||(o.video=!1),this._createRTCConnection(l,u),Promise.resolve().then(function(){if(s)return s;if(o.audio||o.video){if(!navigator.mediaDevices)throw new Error("Media inaccessible; Secure context required (eg. https://, file://)");return e._localMediaStreamLocallyGenerated=!0,navigator.mediaDevices.getUserMedia(o).catch(function(t){if(e._status===I.STATUS_TERMINATED)throw new Error("terminated");throw n.reply(480),e._failed("local",null,_.causes.USER_DENIED_MEDIA_ACCESS),R.warn('emit "getusermediafailed" [error:%o]',t),e.emit("getusermediafailed",t),new Error("getUserMedia() failed")})}}).then(function(t){if(e._status===I.STATUS_TERMINATED)throw new Error("terminated");e._localMediaStream=t,t&&t.getTracks().forEach(function(n){e._connection.addTrack(n,t)})}).then(function(){if(!e._late_sdp){var t={originator:"remote",type:"offer",sdp:n.body};R.debug('emit "sdp"'),e.emit("sdp",t);var r=new RTCSessionDescription({type:"offer",sdp:t.sdp});return e._connectionPromiseQueue=e._connectionPromiseQueue.then(function(){return e._connection.setRemoteDescription(r)}).catch(function(t){throw n.reply(488),e._failed("system",null,_.causes.WEBRTC_ERROR),R.warn('emit "peerconnection:setremotedescriptionfailed" [error:%o]',t),e.emit("peerconnection:setremotedescriptionfailed",t),new Error("peerconnection.setRemoteDescription() failed")}),e._connectionPromiseQueue}}).then(function(){if(e._status===I.STATUS_TERMINATED)throw new Error("terminated");return e._connecting(n),e._late_sdp?e._createLocalDescription("offer",e._rtcOfferConstraints).catch(function(){throw n.reply(500),new Error("_createLocalDescription() failed")}):e._createLocalDescription("answer",a).catch(function(){throw n.reply(500),new Error("_createLocalDescription() failed")})}).then(function(t){if(e._status===I.STATUS_TERMINATED)throw new Error("terminated");e._handleSessionTimersInIncomingRequest(n,r),n.reply(200,null,r,t,function(){e._status=I.STATUS_WAITING_FOR_ACK,e._setInvite2xxTimer(n,t),e._setACKTimer(),e._accepted("local")},function(){e._failed("system",null,_.causes.CONNECTION_ERROR)})}).catch(function(t){if(R.warn("getUserMedia error: ".concat(JSON.stringify(t))),e._status!==I.STATUS_TERMINATED)throw t})}else n.reply(500,"Error creating dialog")}},{key:"terminate",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};R.debug("terminate()");var n,r=t.cause||_.causes.BYE,i=v.cloneArray(t.extraHeaders),o=t.body,s=t.status_code,l=t.reason_phrase;if(this._status===I.STATUS_TERMINATED)throw new p.InvalidStateError(this._status);switch(this._status){case I.STATUS_NULL:case I.STATUS_INVITE_SENT:case I.STATUS_1XX_RECEIVED:if(R.debug("canceling session"),s&&(s<200||s>=700))throw new TypeError("Invalid status_code: ".concat(s));s&&(l=l||_.REASON_PHRASE[s]||"",n="SIP ;cause=".concat(s,' ;text="').concat(l,'"')),this._status===I.STATUS_NULL||this._status===I.STATUS_INVITE_SENT?(this._is_canceled=!0,this._cancel_reason=n):this._status===I.STATUS_1XX_RECEIVED&&this._request.cancel(n),this._status=I.STATUS_CANCELED,this._failed("local",null,_.causes.CANCELED);break;case I.STATUS_WAITING_FOR_ANSWER:case I.STATUS_ANSWERED:if(R.debug("rejecting session"),(s=s||480)<300||s>=700)throw new TypeError("Invalid status_code: ".concat(s));this._request.reply(s,l,i,o),this._failed("local",null,_.causes.REJECTED);break;case I.STATUS_WAITING_FOR_ACK:case I.STATUS_CONFIRMED:if(R.debug("terminating session"),l=t.reason_phrase||_.REASON_PHRASE[s]||"",s&&(s<200||s>=700))throw new TypeError("Invalid status_code: ".concat(s));if(s&&i.push("Reason: SIP ;cause=".concat(s,'; text="').concat(l,'"')),this._status===I.STATUS_WAITING_FOR_ACK&&"incoming"===this._direction&&this._request.server_transaction.state!==m.C.STATUS_TERMINATED){var u=this._dialog;this.receiveRequest=function(t){t.method===_.ACK&&(e.sendRequest(_.BYE,{extraHeaders:i,body:o}),u.terminate())},this._request.server_transaction.on("stateChanged",function(){e._request.server_transaction.state===m.C.STATUS_TERMINATED&&(e.sendRequest(_.BYE,{extraHeaders:i,body:o}),u.terminate())}),this._ended("local",null,r),this._dialog=u,this._ua.newDialog(u)}else this.sendRequest(_.BYE,{extraHeaders:i,body:o}),this._ended("local",null,r)}}},{key:"sendDTMF",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};R.debug("sendDTMF() | tones: %s",e);var n=0,r=t.duration||null,i=t.interToneGap||null,o=t.transportType||_.DTMF_TRANSPORT.INFO;if(void 0===e)throw new TypeError("Not enough arguments");if(this._status!==I.STATUS_CONFIRMED&&this._status!==I.STATUS_WAITING_FOR_ACK&&this._status!==I.STATUS_1XX_RECEIVED)throw new p.InvalidStateError(this._status);if(o!==_.DTMF_TRANSPORT.INFO&&o!==_.DTMF_TRANSPORT.RFC2833)throw new TypeError("invalid transportType: ".concat(o));if("number"==typeof e&&(e=e.toString()),!e||"string"!=typeof e||!e.match(/^[0-9A-DR#*,]+$/i))throw new TypeError("Invalid tones: ".concat(e));if(r&&!v.isDecimal(r))throw new TypeError("Invalid tone duration: ".concat(r));if(r?rS.C.MAX_DURATION?(R.debug('"duration" value is greater than the maximum allowed, setting it to '.concat(S.C.MAX_DURATION," milliseconds")),r=S.C.MAX_DURATION):r=Math.abs(r):r=S.C.DEFAULT_DURATION,t.duration=r,i&&!v.isDecimal(i))throw new TypeError("Invalid interToneGap: ".concat(i));if(i?i=this._tones.length)return void(this._tones=null);var l=this._tones[n];n+=1;if(","===l)s=2e3;else{var u=new S(this);t.eventHandlers={onFailed:function(){o._tones=null}},u.send(l,t),s=r+i}setTimeout(e.bind(this),s)}.call(this));else{var s=this._getDTMFRTPSender();s&&(e=s.toneBuffer+e,s.insertDTMF(e,r,i))}}},{key:"sendInfo",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(R.debug("sendInfo()"),this._status!==I.STATUS_CONFIRMED&&this._status!==I.STATUS_WAITING_FOR_ACK&&this._status!==I.STATUS_1XX_RECEIVED)throw new p.InvalidStateError(this._status);new C(this).send(e,t,n)}},{key:"mute",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{audio:!0,video:!1};R.debug("mute()");var t=!1,n=!1;!1===this._audioMuted&&e.audio&&(t=!0,this._audioMuted=!0,this._toggleMuteAudio(!0)),!1===this._videoMuted&&e.video&&(n=!0,this._videoMuted=!0,this._toggleMuteVideo(!0)),!0!==t&&!0!==n||this._onmute({audio:t,video:n})}},{key:"unmute",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{audio:!0,video:!0};R.debug("unmute()");var t=!1,n=!1;!0===this._audioMuted&&e.audio&&(t=!0,this._audioMuted=!1,!1===this._localHold&&this._toggleMuteAudio(!1)),!0===this._videoMuted&&e.video&&(n=!0,this._videoMuted=!1,!1===this._localHold&&this._toggleMuteVideo(!1)),!0!==t&&!0!==n||this._onunmute({audio:t,video:n})}},{key:"hold",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0;if(R.debug("hold()"),this._status!==I.STATUS_WAITING_FOR_ACK&&this._status!==I.STATUS_CONFIRMED)return!1;if(!0===this._localHold)return!1;if(!this._isReadyToReOffer())return!1;this._localHold=!0,this._onhold("local");var r={succeeded:function(){n&&n()},failed:function(){e.terminate({cause:_.causes.WEBRTC_ERROR,status_code:500,reason_phrase:"Hold Failed"})}};return t.useUpdate?this._sendUpdate({sdpOffer:!0,eventHandlers:r,extraHeaders:t.extraHeaders}):this._sendReinvite({eventHandlers:r,extraHeaders:t.extraHeaders}),!0}},{key:"unhold",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0;if(R.debug("unhold()"),this._status!==I.STATUS_WAITING_FOR_ACK&&this._status!==I.STATUS_CONFIRMED)return!1;if(!1===this._localHold)return!1;if(!this._isReadyToReOffer())return!1;this._localHold=!1,this._onunhold("local");var r={succeeded:function(){n&&n()},failed:function(){e.terminate({cause:_.causes.WEBRTC_ERROR,status_code:500,reason_phrase:"Unhold Failed"})}};return t.useUpdate?this._sendUpdate({sdpOffer:!0,eventHandlers:r,extraHeaders:t.extraHeaders}):this._sendReinvite({eventHandlers:r,extraHeaders:t.extraHeaders}),!0}},{key:"renegotiate",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0;R.debug("renegotiate()");var r=t.rtcOfferConstraints||null;if(this._status!==I.STATUS_WAITING_FOR_ACK&&this._status!==I.STATUS_CONFIRMED)return!1;if(!this._isReadyToReOffer())return!1;var i={succeeded:function(){n&&n()},failed:function(){e.terminate({cause:_.causes.WEBRTC_ERROR,status_code:500,reason_phrase:"Media Renegotiation Failed"})}};return this._setLocalMediaStatus(),t.useUpdate?this._sendUpdate({sdpOffer:!0,eventHandlers:i,rtcOfferConstraints:r,extraHeaders:t.extraHeaders}):this._sendReinvite({eventHandlers:i,rtcOfferConstraints:r,extraHeaders:t.extraHeaders}),!0}},{key:"refer",value:function(e,t){var n=this;R.debug("refer()");var r=e;if(this._status!==I.STATUS_WAITING_FOR_ACK&&this._status!==I.STATUS_CONFIRMED)return!1;if(!(e=this._ua.normalizeTarget(e)))throw new TypeError("Invalid target: ".concat(r));var i=new A(this);i.sendRefer(e,t);var o=i.id;return this._referSubscribers[o]=i,i.on("requestFailed",function(){delete n._referSubscribers[o]}),i.on("accepted",function(){delete n._referSubscribers[o]}),i.on("failed",function(){delete n._referSubscribers[o]}),i}},{key:"sendRequest",value:function(e,t){return R.debug("sendRequest()"),this._dialog.sendRequest(e,t)}},{key:"receiveRequest",value:function(e){var t=this;if(R.debug("receiveRequest()"),e.method===_.CANCEL)this._status!==I.STATUS_WAITING_FOR_ANSWER&&this._status!==I.STATUS_ANSWERED||(this._status=I.STATUS_CANCELED,this._request.reply(487),this._failed("remote",e,_.causes.CANCELED));else switch(e.method){case _.ACK:if(this._status!==I.STATUS_WAITING_FOR_ACK)return;if(this._status=I.STATUS_CONFIRMED,clearTimeout(this._timers.ackTimer),clearTimeout(this._timers.invite2xxTimer),this._late_sdp){if(!e.body){this.terminate({cause:_.causes.MISSING_SDP,status_code:400});break}var n={originator:"remote",type:"answer",sdp:e.body};R.debug('emit "sdp"'),this.emit("sdp",n);var r=new RTCSessionDescription({type:"answer",sdp:n.sdp});this._connectionPromiseQueue=this._connectionPromiseQueue.then(function(){return t._connection.setRemoteDescription(r)}).then(function(){t._is_confirmed||t._confirmed("remote",e)}).catch(function(e){t.terminate({cause:_.causes.BAD_MEDIA_DESCRIPTION,status_code:488}),R.warn('emit "peerconnection:setremotedescriptionfailed" [error:%o]',e),t.emit("peerconnection:setremotedescriptionfailed",e)})}else this._is_confirmed||this._confirmed("remote",e);break;case _.BYE:this._status===I.STATUS_CONFIRMED||this._status===I.STATUS_WAITING_FOR_ACK?(e.reply(200),this._ended("remote",e,_.causes.BYE)):this._status===I.STATUS_INVITE_RECEIVED||this._status===I.STATUS_WAITING_FOR_ANSWER?(e.reply(200),this._request.reply(487,"BYE Received"),this._ended("remote",e,_.causes.BYE)):e.reply(403,"Wrong Status");break;case _.INVITE:this._status===I.STATUS_CONFIRMED?e.hasHeader("replaces")?this._receiveReplaces(e):this._receiveReinvite(e):e.reply(403,"Wrong Status");break;case _.INFO:if(this._status===I.STATUS_1XX_RECEIVED||this._status===I.STATUS_WAITING_FOR_ANSWER||this._status===I.STATUS_ANSWERED||this._status===I.STATUS_WAITING_FOR_ACK||this._status===I.STATUS_CONFIRMED){var i=e.hasHeader("Content-Type")?e.getHeader("Content-Type").toLowerCase():void 0;i&&i.match(/^application\/dtmf-relay/i)?new S(this).init_incoming(e):void 0!==i?new C(this).init_incoming(e):e.reply(415)}else e.reply(403,"Wrong Status");break;case _.UPDATE:this._status===I.STATUS_CONFIRMED?this._receiveUpdate(e):e.reply(403,"Wrong Status");break;case _.REFER:this._status===I.STATUS_CONFIRMED?this._receiveRefer(e):e.reply(403,"Wrong Status");break;case _.NOTIFY:this._status===I.STATUS_CONFIRMED?this._receiveNotify(e):e.reply(403,"Wrong Status");break;default:e.reply(501)}}},{key:"onTransportError",value:function(){R.warn("onTransportError()"),this._status!==I.STATUS_TERMINATED&&this.terminate({status_code:500,reason_phrase:_.causes.CONNECTION_ERROR,cause:_.causes.CONNECTION_ERROR})}},{key:"onRequestTimeout",value:function(){R.warn("onRequestTimeout()"),this._status!==I.STATUS_TERMINATED&&this.terminate({status_code:408,reason_phrase:_.causes.REQUEST_TIMEOUT,cause:_.causes.REQUEST_TIMEOUT})}},{key:"onDialogError",value:function(){R.warn("onDialogError()"),this._status!==I.STATUS_TERMINATED&&this.terminate({status_code:500,reason_phrase:_.causes.DIALOG_ERROR,cause:_.causes.DIALOG_ERROR})}},{key:"newDTMF",value:function(e){R.debug("newDTMF()"),this.emit("newDTMF",e)}},{key:"newInfo",value:function(e){R.debug("newInfo()"),this.emit("newInfo",e)}},{key:"_isReadyToReOffer",value:function(){return this._rtcReady?this._dialog?!0!==this._dialog.uac_pending_reply&&!0!==this._dialog.uas_pending_reply||(R.debug("_isReadyToReOffer() | there is another INVITE/UPDATE transaction in progress"),!1):(R.debug("_isReadyToReOffer() | session not established yet"),!1):(R.debug("_isReadyToReOffer() | internal WebRTC status not ready"),!1)}},{key:"_close",value:function(){if(R.debug("close()"),this._localMediaStream&&this._localMediaStreamLocallyGenerated&&(R.debug("close() | closing local MediaStream"),v.closeMediaStream(this._localMediaStream)),this._status!==I.STATUS_TERMINATED){if(this._status=I.STATUS_TERMINATED,this._connection)try{this._connection.close()}catch(e){R.warn("close() | error closing the RTCPeerConnection: %o",e)}for(var e in this._timers)Object.prototype.hasOwnProperty.call(this._timers,e)&&clearTimeout(this._timers[e]);for(var t in clearTimeout(this._sessionTimers.timer),this._dialog&&(this._dialog.terminate(),delete this._dialog),this._earlyDialogs)Object.prototype.hasOwnProperty.call(this._earlyDialogs,t)&&(this._earlyDialogs[t].terminate(),delete this._earlyDialogs[t]);for(var n in this._referSubscribers)Object.prototype.hasOwnProperty.call(this._referSubscribers,n)&&delete this._referSubscribers[n];this._ua.destroyRTCSession(this)}}},{key:"_setInvite2xxTimer",value:function(e,t){var n=g.T1;this._timers.invite2xxTimer=setTimeout(function r(){this._status===I.STATUS_WAITING_FOR_ACK&&(e.reply(200,null,["Contact: ".concat(this._contact)],t),ng.T2&&(n=g.T2),this._timers.invite2xxTimer=setTimeout(r.bind(this),n))}.bind(this),n)}},{key:"_setACKTimer",value:function(){var e=this;this._timers.ackTimer=setTimeout(function(){e._status===I.STATUS_WAITING_FOR_ACK&&(R.debug("no ACK received, terminating the session"),clearTimeout(e._timers.invite2xxTimer),e.sendRequest(_.BYE),e._ended("remote",null,_.causes.NO_ACK))},g.TIMER_H)}},{key:"_createRTCConnection",value:function(e,t){var n=this;this._connection=new RTCPeerConnection(e,t),this._connection.addEventListener("iceconnectionstatechange",function(){"failed"===n._connection.iceConnectionState&&n.terminate({cause:_.causes.RTP_TIMEOUT,status_code:408,reason_phrase:_.causes.RTP_TIMEOUT})}),R.debug('emit "peerconnection"'),this.emit("peerconnection",{peerconnection:this._connection})}},{key:"_createLocalDescription",value:function(e,t){var n=this;if(R.debug("createLocalDescription()"),"offer"!==e&&"answer"!==e)throw new Error('createLocalDescription() | invalid type "'.concat(e,'"'));var r=this._connection;return this._rtcReady=!1,Promise.resolve().then(function(){return"offer"===e?r.createOffer(t).catch(function(e){return R.warn('emit "peerconnection:createofferfailed" [error:%o]',e),n.emit("peerconnection:createofferfailed",e),Promise.reject(e)}):r.createAnswer(t).catch(function(e){return R.warn('emit "peerconnection:createanswerfailed" [error:%o]',e),n.emit("peerconnection:createanswerfailed",e),Promise.reject(e)})}).then(function(e){return r.setLocalDescription(e).catch(function(e){return n._rtcReady=!0,R.warn('emit "peerconnection:setlocaldescriptionfailed" [error:%o]',e),n.emit("peerconnection:setlocaldescriptionfailed",e),Promise.reject(e)})}).then(function(){var i=t&&t.iceRestart;if("complete"===r.iceGatheringState&&!i||"gathering"===r.iceGatheringState&&n._iceReady){n._rtcReady=!0;var o={originator:"local",type:e,sdp:r.localDescription.sdp};return R.debug('emit "sdp"'),n.emit("sdp",o),Promise.resolve(o.sdp)}return new Promise(function(t){var i,o,s=!1;n._iceReady=!1;var l=function(){if(!s){r.removeEventListener("icecandidate",i),r.removeEventListener("icegatheringstatechange",o),s=!0,n._rtcReady=!0,n._iceReady=!0;var l={originator:"local",type:e,sdp:r.localDescription.sdp};R.debug('emit "sdp"'),n.emit("sdp",l),t(l.sdp)}};r.addEventListener("icecandidate",i=function(e){var t=e.candidate;t?n.emit("icecandidate",{candidate:t,ready:l}):l()}),r.addEventListener("icegatheringstatechange",o=function(){"complete"===r.iceGatheringState&&l()})})})}},{key:"_createDialog",value:function(e,t,n){var r="UAS"===t?e.to_tag:e.from_tag,i="UAS"===t?e.from_tag:e.to_tag,o=e.call_id+r+i,s=this._earlyDialogs[o];if(n)return!!s||((s=new T(this,e,t,T.C.STATUS_EARLY)).error?(R.debug(s.error),this._failed("remote",e,_.causes.INTERNAL_ERROR),!1):(this._earlyDialogs[o]=s,!0));if(this._from_tag=e.from_tag,this._to_tag=e.to_tag,s)return s.update(e,t),this._dialog=s,delete this._earlyDialogs[o],!0;var l=new T(this,e,t);return l.error?(R.debug(l.error),this._failed("remote",e,_.causes.INTERNAL_ERROR),!1):(this._dialog=l,!0)}},{key:"_receiveReinvite",value:function(e){var t=this;R.debug("receiveReinvite()");var n=e.hasHeader("Content-Type")?e.getHeader("Content-Type").toLowerCase():void 0,r={request:e,callback:void 0,reject:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};i=!0;var n=t.status_code||403,r=t.reason_phrase||"",o=v.cloneArray(t.extraHeaders);if(this._status!==I.STATUS_CONFIRMED)return!1;if(n<300||n>=700)throw new TypeError("Invalid status_code: ".concat(n));e.reply(n,r,o)}.bind(this)},i=!1;if(this.emit("reinvite",r),!i){if(this._late_sdp=!1,!e.body)return this._late_sdp=!0,this._remoteHold&&(this._remoteHold=!1,this._onunhold("remote")),void(this._connectionPromiseQueue=this._connectionPromiseQueue.then(function(){return t._createLocalDescription("offer",t._rtcOfferConstraints)}).then(function(e){o.call(t,e)}).catch(function(){e.reply(500)}));if("application/sdp"!==n)return R.debug("invalid Content-Type"),void e.reply(415);this._processInDialogSdpOffer(e).then(function(e){t._status!==I.STATUS_TERMINATED&&o.call(t,e)}).catch(function(e){R.warn(e)})}function o(t){var n=this,i=["Contact: ".concat(this._contact)];this._handleSessionTimersInIncomingRequest(e,i),this._late_sdp&&(t=this._mangleOffer(t)),e.reply(200,null,i,t,function(){n._status=I.STATUS_WAITING_FOR_ACK,n._setInvite2xxTimer(e,t),n._setACKTimer()}),"function"==typeof r.callback&&r.callback()}}},{key:"_receiveUpdate",value:function(e){var t=this;R.debug("receiveUpdate()");var n=e.hasHeader("Content-Type")?e.getHeader("Content-Type").toLowerCase():void 0,r={request:e,callback:void 0,reject:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};i=!0;var n=t.status_code||403,r=t.reason_phrase||"",o=v.cloneArray(t.extraHeaders);if(this._status!==I.STATUS_CONFIRMED)return!1;if(n<300||n>=700)throw new TypeError("Invalid status_code: ".concat(n));e.reply(n,r,o)}.bind(this)},i=!1;if(this.emit("update",r),!i)if(e.body){if("application/sdp"!==n)return R.debug("invalid Content-Type"),void e.reply(415);this._processInDialogSdpOffer(e).then(function(e){t._status!==I.STATUS_TERMINATED&&o.call(t,e)}).catch(function(e){R.warn(e)})}else o.call(this,null);function o(t){var n=["Contact: ".concat(this._contact)];this._handleSessionTimersInIncomingRequest(e,n),e.reply(200,null,n,t),"function"==typeof r.callback&&r.callback()}}},{key:"_processInDialogSdpOffer",value:function(e){var t=this;R.debug("_processInDialogSdpOffer()");var n,r=e.parseSDP(),o=!1,s=i(r.media);try{for(s.s();!(n=s.n()).done;){var l=n.value;if(-1!==O.indexOf(l.type)){var u=l.direction||r.direction||"sendrecv";if("sendonly"!==u&&"inactive"!==u){o=!1;break}o=!0}}}catch(e){s.e(e)}finally{s.f()}var a={originator:"remote",type:"offer",sdp:e.body};R.debug('emit "sdp"'),this.emit("sdp",a);var c=new RTCSessionDescription({type:"offer",sdp:a.sdp});return this._connectionPromiseQueue=this._connectionPromiseQueue.then(function(){if(t._status===I.STATUS_TERMINATED)throw new Error("terminated");return t._connection.setRemoteDescription(c).catch(function(n){throw e.reply(488),R.warn('emit "peerconnection:setremotedescriptionfailed" [error:%o]',n),t.emit("peerconnection:setremotedescriptionfailed",n),n})}).then(function(){if(t._status===I.STATUS_TERMINATED)throw new Error("terminated");!0===t._remoteHold&&!1===o?(t._remoteHold=!1,t._onunhold("remote")):!1===t._remoteHold&&!0===o&&(t._remoteHold=!0,t._onhold("remote"))}).then(function(){if(t._status===I.STATUS_TERMINATED)throw new Error("terminated");return t._createLocalDescription("answer",t._rtcAnswerConstraints).catch(function(t){throw e.reply(500),R.warn('emit "peerconnection:createtelocaldescriptionfailed" [error:%o]',t),t})}).catch(function(e){R.warn("_processInDialogSdpOffer() failed [error: %o]",e)}),this._connectionPromiseQueue}},{key:"_receiveRefer",value:function(e){var n=this;if(R.debug("receiveRefer()"),!e.refer_to)return R.debug("no Refer-To header field present in REFER"),void e.reply(400);if(e.refer_to.uri.scheme!==_.SIP)return R.debug("Refer-To header field points to a non-SIP URI scheme"),void e.reply(416);e.reply(202);var r=new E(this,e.cseq);R.debug('emit "refer"'),this.emit("refer",{request:e,accept:function(i,o){(function(n){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(n="function"==typeof n?n:null,this._status!==I.STATUS_WAITING_FOR_ACK&&this._status!==I.STATUS_CONFIRMED)return!1;var o=new t(this._ua);if(o.on("progress",function(e){var t=e.response;r.notify(t.status_code,t.reason_phrase)}),o.on("accepted",function(e){var t=e.response;r.notify(t.status_code,t.reason_phrase)}),o.on("_failed",function(e){var t=e.message,n=e.cause;t?r.notify(t.status_code,t.reason_phrase):r.notify(487,n)}),e.refer_to.uri.hasHeader("replaces")){var s=decodeURIComponent(e.refer_to.uri.getHeader("replaces"));i.extraHeaders=v.cloneArray(i.extraHeaders),i.extraHeaders.push("Replaces: ".concat(s))}o.connect(e.refer_to.uri.toAor(),i,n)}).call(n,i,o)},reject:function(){(function(){r.notify(603)}).call(n)}})}},{key:"_receiveNotify",value:function(e){switch(R.debug("receiveNotify()"),e.event||e.reply(400),e.event.event){case"refer":var t,n;if(e.event.params&&e.event.params.id)t=e.event.params.id,n=this._referSubscribers[t];else{if(1!==Object.keys(this._referSubscribers).length)return void e.reply(400,"Missing event id parameter");n=this._referSubscribers[Object.keys(this._referSubscribers)[0]]}if(!n)return void e.reply(481,"Subscription does not exist");n.receiveNotify(e),e.reply(200);break;default:e.reply(489)}}},{key:"_receiveReplaces",value:function(e){var n=this;R.debug("receiveReplaces()"),this.emit("replaces",{request:e,accept:function(r){(function(n){var r=this;if(this._status!==I.STATUS_WAITING_FOR_ACK&&this._status!==I.STATUS_CONFIRMED)return!1;var i=new t(this._ua);i.on("confirmed",function(){r.terminate()}),i.init_incoming(e,n)}).call(n,r)},reject:function(){(function(){R.debug("Replaced INVITE rejected by the user"),e.reply(486)}).call(n)}})}},{key:"_sendInitialRequest",value:function(e,t,n){var r=this,i=new b(this._ua,this._request,{onRequestTimeout:function(){r.onRequestTimeout()},onTransportError:function(){r.onTransportError()},onAuthenticated:function(e){r._request=e},onReceiveResponse:function(e){r._receiveInviteResponse(e)}});Promise.resolve().then(function(){if(n)return n;if(e.audio||e.video){if(!navigator.mediaDevices)throw new Error("Media inaccessible; Secure context required (eg. https://, file://)");return r._localMediaStreamLocallyGenerated=!0,R.warn("getUserMedia requesting ".concat(JSON.stringify(e)," from ").concat(JSON.stringify(navigator.mediaDevices))),navigator.mediaDevices.getUserMedia(e).then(function(e){return R.warn("getUserMedia gives ".concat(JSON.stringify(e))),e}).catch(function(e){if(R.warn("getUserMedia error ".concat(JSON.stringify(e))),r._status===I.STATUS_TERMINATED)throw new Error("terminated");throw r._failed("local",null,_.causes.USER_DENIED_MEDIA_ACCESS),R.warn('emit "getusermediafailed" [error:%o]',e),r.emit("getusermediafailed",e),e})}}).then(function(e){if(R.warn("getUserMedia returned stream ".concat(JSON.stringify(e))),r._status===I.STATUS_TERMINATED)throw new Error("terminated");return r._localMediaStream=e,e&&e.getTracks().forEach(function(t){r._connection.addTrack(t,e)}),r._connecting(r._request),r._createLocalDescription("offer",t).catch(function(e){throw r._failed("local",null,_.causes.WEBRTC_ERROR),e})}).then(function(e){if(r._is_canceled||r._status===I.STATUS_TERMINATED)throw new Error("terminated");r._request.body=e,r._status=I.STATUS_INVITE_SENT,R.debug('emit "sending" [request:%o]',r._request),r.emit("sending",{request:r._request}),i.send()}).catch(function(e){if(R.warn("getUserMedia error: ".concat(JSON.stringify(e))),r._status!==I.STATUS_TERMINATED)throw e})}},{key:"_getDTMFRTPSender",value:function(){var e=this._connection.getSenders().find(function(e){return e.track&&"audio"===e.track.kind});if(e&&e.dtmf)return e.dtmf;R.warn("sendDTMF() | no local audio track to send DTMF with")}},{key:"_receiveInviteResponse",value:function(e){var t=this;if(R.debug("receiveInviteResponse()"),this._dialog&&e.status_code>=200&&e.status_code<=299){if(this._dialog.id.call_id===e.call_id&&this._dialog.id.local_tag===e.from_tag&&this._dialog.id.remote_tag===e.to_tag)return void this.sendRequest(_.ACK);var n=new T(this,e,"UAC");return void 0!==n.error?void R.debug(n.error):(this.sendRequest(_.ACK),void this.sendRequest(_.BYE))}if(this._is_canceled)e.status_code>=100&&e.status_code<200?this._request.cancel(this._cancel_reason):e.status_code>=200&&e.status_code<299&&this._acceptAndTerminate(e);else if(this._status===I.STATUS_INVITE_SENT||this._status===I.STATUS_1XX_RECEIVED)switch(!0){case/^100$/.test(e.status_code):this._status=I.STATUS_1XX_RECEIVED;break;case/^1[0-9]{2}$/.test(e.status_code):if(!e.to_tag){R.debug("1xx response received without to tag");break}if(e.hasHeader("contact")&&!this._createDialog(e,"UAC",!0))break;if(this._status=I.STATUS_1XX_RECEIVED,!e.body){this._progress("remote",e);break}var r={originator:"remote",type:"answer",sdp:e.body};R.debug('emit "sdp"'),this.emit("sdp",r);var i=new RTCSessionDescription({type:"answer",sdp:r.sdp});this._connectionPromiseQueue=this._connectionPromiseQueue.then(function(){return t._connection.setRemoteDescription(i)}).then(function(){return t._progress("remote",e)}).catch(function(e){R.warn('emit "peerconnection:setremotedescriptionfailed" [error:%o]',e),t.emit("peerconnection:setremotedescriptionfailed",e)});break;case/^2[0-9]{2}$/.test(e.status_code):if(this._status=I.STATUS_CONFIRMED,!e.body){this._acceptAndTerminate(e,400,_.causes.MISSING_SDP),this._failed("remote",e,_.causes.BAD_MEDIA_DESCRIPTION);break}if(!this._createDialog(e,"UAC"))break;var o={originator:"remote",type:"answer",sdp:e.body};R.debug('emit "sdp"'),this.emit("sdp",o);var s=new RTCSessionDescription({type:"answer",sdp:o.sdp});this._connectionPromiseQueue=this._connectionPromiseQueue.then(function(){if("stable"===t._connection.signalingState)return t._connection.createOffer(t._rtcOfferConstraints).then(function(e){return t._connection.setLocalDescription(e)}).catch(function(n){t._acceptAndTerminate(e,500,n.toString()),t._failed("local",e,_.causes.WEBRTC_ERROR)})}).then(function(){t._connection.setRemoteDescription(s).then(function(){t._handleSessionTimersInIncomingResponse(e),t._accepted("remote",e),t.sendRequest(_.ACK),t._confirmed("local",null)}).catch(function(n){t._acceptAndTerminate(e,488,"Not Acceptable Here"),t._failed("remote",e,_.causes.BAD_MEDIA_DESCRIPTION),R.warn('emit "peerconnection:setremotedescriptionfailed" [error:%o]',n),t.emit("peerconnection:setremotedescriptionfailed",n)})});break;default:var l=v.sipErrorCause(e.status_code);this._failed("remote",e,l)}}},{key:"_sendReinvite",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};R.debug("sendReinvite()");var n=v.cloneArray(t.extraHeaders),r=v.cloneObject(t.eventHandlers),i=t.rtcOfferConstraints||this._rtcOfferConstraints||null,o=!1;function s(e){r.failed&&r.failed(e)}n.push("Contact: ".concat(this._contact)),n.push("Content-Type: application/sdp"),this._sessionTimers.running&&n.push("Session-Expires: ".concat(this._sessionTimers.currentExpires,";refresher=").concat(this._sessionTimers.refresher?"uac":"uas")),this._connectionPromiseQueue=this._connectionPromiseQueue.then(function(){return e._createLocalDescription("offer",i)}).then(function(t){var i={originator:"local",type:"offer",sdp:t=e._mangleOffer(t)};R.debug('emit "sdp"'),e.emit("sdp",i),e.sendRequest(_.INVITE,{extraHeaders:n,body:t,eventHandlers:{onSuccessResponse:function(t){(function(e){var t=this;if(this._status===I.STATUS_TERMINATED)return;if(this.sendRequest(_.ACK),o)return;if(this._handleSessionTimersInIncomingResponse(e),!e.body)return void s.call(this);if(!e.hasHeader("Content-Type")||"application/sdp"!==e.getHeader("Content-Type").toLowerCase())return void s.call(this);var n={originator:"remote",type:"answer",sdp:e.body};R.debug('emit "sdp"'),this.emit("sdp",n);var i=new RTCSessionDescription({type:"answer",sdp:n.sdp});this._connectionPromiseQueue=this._connectionPromiseQueue.then(function(){return t._connection.setRemoteDescription(i)}).then(function(){r.succeeded&&r.succeeded(e)}).catch(function(e){s.call(t),R.warn('emit "peerconnection:setremotedescriptionfailed" [error:%o]',e),t.emit("peerconnection:setremotedescriptionfailed",e)})}).call(e,t),o=!0},onErrorResponse:function(t){s.call(e,t)},onTransportError:function(){e.onTransportError()},onRequestTimeout:function(){e.onRequestTimeout()},onDialogError:function(){e.onDialogError()}}})}).catch(function(){s()})}},{key:"_sendUpdate",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};R.debug("sendUpdate()");var n=v.cloneArray(t.extraHeaders),r=v.cloneObject(t.eventHandlers),i=t.rtcOfferConstraints||this._rtcOfferConstraints||null,o=t.sdpOffer||!1,s=!1;function l(e){var t=this;if(this._status!==I.STATUS_TERMINATED&&!s)if(this._handleSessionTimersInIncomingResponse(e),o){if(!e.body)return void u.call(this);if(!e.hasHeader("Content-Type")||"application/sdp"!==e.getHeader("Content-Type").toLowerCase())return void u.call(this);var n={originator:"remote",type:"answer",sdp:e.body};R.debug('emit "sdp"'),this.emit("sdp",n);var i=new RTCSessionDescription({type:"answer",sdp:n.sdp});this._connectionPromiseQueue=this._connectionPromiseQueue.then(function(){return t._connection.setRemoteDescription(i)}).then(function(){r.succeeded&&r.succeeded(e)}).catch(function(e){u.call(t),R.warn('emit "peerconnection:setremotedescriptionfailed" [error:%o]',e),t.emit("peerconnection:setremotedescriptionfailed",e)})}else r.succeeded&&r.succeeded(e)}function u(e){r.failed&&r.failed(e)}n.push("Contact: ".concat(this._contact)),this._sessionTimers.running&&n.push("Session-Expires: ".concat(this._sessionTimers.currentExpires,";refresher=").concat(this._sessionTimers.refresher?"uac":"uas")),o?(n.push("Content-Type: application/sdp"),this._connectionPromiseQueue=this._connectionPromiseQueue.then(function(){return e._createLocalDescription("offer",i)}).then(function(t){var r={originator:"local",type:"offer",sdp:t=e._mangleOffer(t)};R.debug('emit "sdp"'),e.emit("sdp",r),e.sendRequest(_.UPDATE,{extraHeaders:n,body:t,eventHandlers:{onSuccessResponse:function(t){l.call(e,t),s=!0},onErrorResponse:function(t){u.call(e,t)},onTransportError:function(){e.onTransportError()},onRequestTimeout:function(){e.onRequestTimeout()},onDialogError:function(){e.onDialogError()}}})}).catch(function(){u.call(e)})):this.sendRequest(_.UPDATE,{extraHeaders:n,eventHandlers:{onSuccessResponse:function(t){l.call(e,t)},onErrorResponse:function(t){u.call(e,t)},onTransportError:function(){e.onTransportError()},onRequestTimeout:function(){e.onRequestTimeout()},onDialogError:function(){e.onDialogError()}}})}},{key:"_acceptAndTerminate",value:function(e,t,n){R.debug("acceptAndTerminate()");var r=[];t&&(n=n||_.REASON_PHRASE[t]||"",r.push("Reason: SIP ;cause=".concat(t,'; text="').concat(n,'"'))),(this._dialog||this._createDialog(e,"UAC"))&&(this.sendRequest(_.ACK),this.sendRequest(_.BYE,{extraHeaders:r})),this._status=I.STATUS_TERMINATED}},{key:"_mangleOffer",value:function(e){if(!this._localHold&&!this._remoteHold)return e;if(e=h.parse(e),this._localHold&&!this._remoteHold){R.debug("mangleOffer() | me on hold, mangling offer");var t,n=i(e.media);try{for(n.s();!(t=n.n()).done;){var r=t.value;-1!==O.indexOf(r.type)&&(r.direction?"sendrecv"===r.direction?r.direction="sendonly":"recvonly"===r.direction&&(r.direction="inactive"):r.direction="sendonly")}}catch(e){n.e(e)}finally{n.f()}}else if(this._localHold&&this._remoteHold){R.debug("mangleOffer() | both on hold, mangling offer");var o,s=i(e.media);try{for(s.s();!(o=s.n()).done;){var l=o.value;-1!==O.indexOf(l.type)&&(l.direction="inactive")}}catch(e){s.e(e)}finally{s.f()}}else if(this._remoteHold){R.debug("mangleOffer() | remote on hold, mangling offer");var u,a=i(e.media);try{for(a.s();!(u=a.n()).done;){var c=u.value;-1!==O.indexOf(c.type)&&(c.direction?"sendrecv"===c.direction?c.direction="recvonly":"recvonly"===c.direction&&(c.direction="inactive"):c.direction="recvonly")}}catch(e){a.e(e)}finally{a.f()}}return h.write(e)}},{key:"_setLocalMediaStatus",value:function(){var e=!0,t=!0;(this._localHold||this._remoteHold)&&(e=!1,t=!1),this._audioMuted&&(e=!1),this._videoMuted&&(t=!1),this._toggleMuteAudio(!e),this._toggleMuteVideo(!t)}},{key:"_handleSessionTimersInIncomingRequest",value:function(e,t){var n;this._sessionTimers.enabled&&(e.session_expires&&e.session_expires>=_.MIN_SESSION_EXPIRES?(this._sessionTimers.currentExpires=e.session_expires,n=e.session_expires_refresher||"uas"):(this._sessionTimers.currentExpires=this._sessionTimers.defaultExpires,n="uas"),t.push("Session-Expires: ".concat(this._sessionTimers.currentExpires,";refresher=").concat(n)),this._sessionTimers.refresher="uas"===n,this._runSessionTimer())}},{key:"_handleSessionTimersInIncomingResponse",value:function(e){var t;this._sessionTimers.enabled&&(e.session_expires&&e.session_expires>=_.MIN_SESSION_EXPIRES?(this._sessionTimers.currentExpires=e.session_expires,t=e.session_expires_refresher||"uac"):(this._sessionTimers.currentExpires=this._sessionTimers.defaultExpires,t="uac"),this._sessionTimers.refresher="uac"===t,this._runSessionTimer())}},{key:"_runSessionTimer",value:function(){var e=this,t=this._sessionTimers.currentExpires;this._sessionTimers.running=!0,clearTimeout(this._sessionTimers.timer),this._sessionTimers.refresher?this._sessionTimers.timer=setTimeout(function(){e._status!==I.STATUS_TERMINATED&&e._isReadyToReOffer()&&(R.debug("runSessionTimer() | sending session refresh request"),e._sessionTimers.refreshMethod===_.UPDATE?e._sendUpdate():e._sendReinvite())},500*t):this._sessionTimers.timer=setTimeout(function(){e._status!==I.STATUS_TERMINATED&&(R.warn("runSessionTimer() | timer expired, terminating the session"),e.terminate({cause:_.causes.REQUEST_TIMEOUT,status_code:408,reason_phrase:"Session Timer Expired"}))},1100*t)}},{key:"_toggleMuteAudio",value:function(e){var t,n=i(this._connection.getSenders().filter(function(e){return e.track&&"audio"===e.track.kind}));try{for(n.s();!(t=n.n()).done;){t.value.track.enabled=!e}}catch(e){n.e(e)}finally{n.f()}}},{key:"_toggleMuteVideo",value:function(e){var t,n=i(this._connection.getSenders().filter(function(e){return e.track&&"video"===e.track.kind}));try{for(n.s();!(t=n.n()).done;){t.value.track.enabled=!e}}catch(e){n.e(e)}finally{n.f()}}},{key:"_newRTCSession",value:function(e,t){R.debug("newRTCSession()"),this._ua.newRTCSession(this,{originator:e,session:this,request:t})}},{key:"_connecting",value:function(e){R.debug("session connecting"),R.debug('emit "connecting"'),this.emit("connecting",{request:e})}},{key:"_progress",value:function(e,t){R.debug("session progress"),R.debug('emit "progress"'),this.emit("progress",{originator:e,response:t||null})}},{key:"_accepted",value:function(e,t){R.debug("session accepted"),this._start_time=new Date,R.debug('emit "accepted"'),this.emit("accepted",{originator:e,response:t||null})}},{key:"_confirmed",value:function(e,t){R.debug("session confirmed"),this._is_confirmed=!0,R.debug('emit "confirmed"'),this.emit("confirmed",{originator:e,ack:t||null})}},{key:"_ended",value:function(e,t,n){R.debug("session ended"),this._end_time=new Date,this._close(),R.debug('emit "ended"'),this.emit("ended",{originator:e,message:t||null,cause:n})}},{key:"_failed",value:function(e,t,n){R.debug("session failed"),R.debug('emit "_failed"'),this.emit("_failed",{originator:e,message:t||null,cause:n}),this._close(),R.debug('emit "failed"'),this.emit("failed",{originator:e,message:t||null,cause:n})}},{key:"_onhold",value:function(e){R.debug("session onhold"),this._setLocalMediaStatus(),R.debug('emit "hold"'),this.emit("hold",{originator:e})}},{key:"_onunhold",value:function(e){R.debug("session onunhold"),this._setLocalMediaStatus(),R.debug('emit "unhold"'),this.emit("unhold",{originator:e})}},{key:"_onmute",value:function(e){var t=e.audio,n=e.video;R.debug("session onmute"),this._setLocalMediaStatus(),R.debug('emit "muted"'),this.emit("muted",{audio:t,video:n})}},{key:"_onunmute",value:function(e){var t=e.audio,n=e.video;R.debug("session onunmute"),this._setLocalMediaStatus(),R.debug('emit "unmuted"'),this.emit("unmuted",{audio:t,video:n})}}])&&s(n.prototype,r),o&&s(n,o),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r,o}()},{"./Constants":2,"./Dialog":3,"./Exceptions":6,"./Logger":9,"./RTCSession/DTMF":15,"./RTCSession/Info":16,"./RTCSession/ReferNotifier":17,"./RTCSession/ReferSubscriber":18,"./RequestSender":20,"./SIPMessage":21,"./Timers":23,"./Transactions":24,"./URI":27,"./Utils":28,events:31,"sdp-transform":37}],15:[function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{};if(void 0===e)throw new TypeError("Not enough arguments");if(this._direction="outgoing",this._session.status!==this._session.C.STATUS_CONFIRMED&&this._session.status!==this._session.C.STATUS_WAITING_FOR_ACK)throw new h.InvalidStateError(this._session.status);var r=d.cloneArray(n.extraHeaders);if(this.eventHandlers=d.cloneObject(n.eventHandlers),"string"==typeof e)e=e.toUpperCase();else{if("number"!=typeof e)throw new TypeError("Invalid tone: ".concat(e));e=e.toString()}if(!e.match(/^[0-9A-DR#*]$/))throw new TypeError("Invalid tone: ".concat(e));this._tone=e,this._duration=n.duration,r.push("Content-Type: application/dtmf-relay");var i="Signal=".concat(this._tone,"\r\n");i+="Duration=".concat(this._duration),this._session.newDTMF({originator:"local",dtmf:this,request:this._request}),this._session.sendRequest(f.INFO,{extraHeaders:r,eventHandlers:{onSuccessResponse:function(e){t.emit("succeeded",{originator:"remote",response:e})},onErrorResponse:function(e){t.eventHandlers.onFailed&&t.eventHandlers.onFailed(),t.emit("failed",{originator:"remote",response:e})},onRequestTimeout:function(){t._session.onRequestTimeout()},onTransportError:function(){t._session.onTransportError()},onDialogError:function(){t._session.onDialogError()}},body:i})}},{key:"init_incoming",value:function(e){var t=/^(Signal\s*?=\s*?)([0-9A-D#*]{1})(\s)?.*/,n=/^(Duration\s?=\s?)([0-9]{1,4})(\s)?.*/;if(this._direction="incoming",this._request=e,e.reply(200),e.body){var r=e.body.split("\n");r.length>=1&&t.test(r[0])&&(this._tone=r[0].replace(t,"$2")),r.length>=2&&n.test(r[1])&&(this._duration=parseInt(r[1].replace(n,"$2"),10))}this._duration||(this._duration=p.DEFAULT_DURATION),this._tone?this._session.newDTMF({originator:"remote",dtmf:this,request:e}):_.debug("invalid INFO DTMF received, discarded")}}])&&i(n.prototype,r),o&&i(n,o),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r,o}(),t.exports.C=p},{"../Constants":2,"../Exceptions":6,"../Logger":9,"../Utils":28,events:31}],16:[function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{};if(this._direction="outgoing",void 0===e)throw new TypeError("Not enough arguments");if(this._session.status!==this._session.C.STATUS_CONFIRMED&&this._session.status!==this._session.C.STATUS_WAITING_FOR_ACK)throw new f.InvalidStateError(this._session.status);this._contentType=e,this._body=t;var i=h.cloneArray(r.extraHeaders);i.push("Content-Type: ".concat(e)),this._session.newInfo({originator:"local",info:this,request:this.request}),this._session.sendRequest(c.INFO,{extraHeaders:i,eventHandlers:{onSuccessResponse:function(e){n.emit("succeeded",{originator:"remote",response:e})},onErrorResponse:function(e){n.emit("failed",{originator:"remote",response:e})},onTransportError:function(){n._session.onTransportError()},onRequestTimeout:function(){n._session.onRequestTimeout()},onDialogError:function(){n._session.onDialogError()}},body:t})}},{key:"init_incoming",value:function(e){this._direction="incoming",this.request=e,e.reply(200),this._contentType=e.hasHeader("Content-Type")?e.getHeader("Content-Type").toLowerCase():void 0,this._body=e.body,this._session.newInfo({originator:"remote",info:this,request:e})}}])&&i(n.prototype,r),o&&i(n,o),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r,o}()},{"../Constants":2,"../Exceptions":6,"../Utils":28,events:31}],17:[function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t){for(var n=0;n=200?"terminated;reason=noresource":"active;expires=".concat(this._expires),this._session.sendRequest(l.NOTIFY,{extraHeaders:["Event: ".concat(a.event_type,";id=").concat(this._id),"Subscription-State: ".concat(n),"Content-Type: ".concat(a.body_type)],body:"SIP/2.0 ".concat(e," ").concat(t),eventHandlers:{onErrorResponse:function(){this._active=!1}}}))}}])&&i(e.prototype,t),n&&i(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,n}()},{"../Constants":2,"../Logger":9}],18:[function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{};_.debug("sendRefer()");var r=d.cloneArray(n.extraHeaders),i=d.cloneObject(n.eventHandlers);for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&this.on(o,i[o]);var s=null;n.replaces&&(s=n.replaces._request.call_id,s+=";to-tag=".concat(n.replaces._to_tag),s+=";from-tag=".concat(n.replaces._from_tag),s=encodeURIComponent(s));var l="Refer-To: <".concat(e).concat(s?"?Replaces=".concat(s):"",">");if(r.push(l),!r.some(function(e){return e.toLowerCase().startsWith("referred-by:")})){var u="Referred-By: <".concat(this._session._ua._configuration.uri._scheme,":").concat(this._session._ua._configuration.uri._user,"@").concat(this._session._ua._configuration.uri._host,">");r.push(u)}r.push("Contact: ".concat(this._session.contact));var a=this._session.sendRequest(f.REFER,{extraHeaders:r,eventHandlers:{onSuccessResponse:function(e){t._requestSucceeded(e)},onErrorResponse:function(e){t._requestFailed(e,f.causes.REJECTED)},onTransportError:function(){t._requestFailed(null,f.causes.CONNECTION_ERROR)},onRequestTimeout:function(){t._requestFailed(null,f.causes.REQUEST_TIMEOUT)},onDialogError:function(){t._requestFailed(null,f.causes.DIALOG_ERROR)}}});this._id=a.cseq}},{key:"receiveNotify",value:function(e){if(_.debug("receiveNotify()"),e.body){var t=h.parse(e.body.trim().split("\r\n",1)[0],"Status_Line");if(-1!==t)switch(!0){case/^100$/.test(t.status_code):this.emit("trying",{request:e,status_line:t});break;case/^1[0-9]{2}$/.test(t.status_code):this.emit("progress",{request:e,status_line:t});break;case/^2[0-9]{2}$/.test(t.status_code):this.emit("accepted",{request:e,status_line:t});break;default:this.emit("failed",{request:e,status_line:t})}else _.debug('receiveNotify() | error parsing NOTIFY body: "'.concat(e.body,'"'))}}},{key:"_requestSucceeded",value:function(e){_.debug("REFER succeeded"),_.debug('emit "requestSucceeded"'),this.emit("requestSucceeded",{response:e})}},{key:"_requestFailed",value:function(e,t){_.debug("REFER failed"),_.debug('emit "requestFailed"'),this.emit("requestFailed",{response:e||null,cause:t})}}])&&i(n.prototype,r),o&&i(n,o),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r,o}()},{"../Constants":2,"../Grammar":7,"../Logger":9,"../Utils":28,events:31}],19:[function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t){for(var n=0;n"'),this._contact+=";reg-id=".concat(this._reg_id),this._contact+=";+sip.instance=".concat(this._sipInstance)},(t=[{key:"registered",get:function(){return this._registered}},{key:"setExtraHeaders",value:function(e){Array.isArray(e)||(e=[]),this._extraHeaders=e.slice()}},{key:"setExtraContactParams",value:function(e){for(var t in e instanceof Object||(e={}),this._extraContactParams="",e)if(Object.prototype.hasOwnProperty.call(e,t)){var n=e[t];this._extraContactParams+=";".concat(t),n&&(this._extraContactParams+="=".concat(n))}}},{key:"register",value:function(){var e=this;if(this._registering)f.debug("Register request in progress...");else{var t=this._extraHeaders.slice();t.push("Contact: ".concat(this._contact,";expires=").concat(this._expires).concat(this._extraContactParams)),t.push("Expires: ".concat(this._expires));var n=l.newTag();this._ua.configuration.register_from_tag_trail&&("function"==typeof this._ua.configuration.register_from_tag_trail?n+=this._ua.configuration.register_from_tag_trail():n+=this._ua.configuration.register_from_tag_trail);var r=new a.OutgoingRequest(u.REGISTER,this._registrar,this._ua,{to_uri:this._to_uri,call_id:this._call_id,cseq:this._cseq+=1,from_tag:n},t),i=new c(this._ua,r,{onRequestTimeout:function(){e._registrationFailure(null,u.causes.REQUEST_TIMEOUT)},onTransportError:function(){e._registrationFailure(null,u.causes.CONNECTION_ERROR)},onAuthenticated:function(){e._cseq+=1},onReceiveResponse:function(t){if(t.cseq===e._cseq)switch(null!==e._registrationTimer&&(clearTimeout(e._registrationTimer),e._registrationTimer=null),!0){case/^1[0-9]{2}$/.test(t.status_code):break;case/^2[0-9]{2}$/.test(t.status_code):if(e._registering=!1,!t.hasHeader("Contact")){f.debug("no Contact header in response to REGISTER, response ignored");break}var n=t.headers.Contact.reduce(function(e,t){return e.concat(t.parsed)},[]),r=n.find(function(t){return e._sipInstance===t.getParam("+sip.instance")&&e._reg_id===parseInt(t.getParam("reg-id"))});if(r||(r=n.find(function(t){return t.uri.user===e._ua.contact.uri.user})),!r){f.debug("no Contact header pointing to us, response ignored");break}var i=r.getParam("expires");!i&&t.hasHeader("expires")&&(i=t.getHeader("expires")),i||(i=e._expires),(i=Number(i))<10&&(i=10);var o=i>64?1e3*i/2+Math.floor(1e3*(i/2-32)*Math.random()):1e3*i-5e3;e._registrationTimer=setTimeout(function(){e._registrationTimer=null,0===e._ua.listeners("registrationExpiring").length?e.register():e._ua.emit("registrationExpiring")},o),r.hasParam("temp-gruu")&&(e._ua.contact.temp_gruu=r.getParam("temp-gruu").replace(/"/g,"")),r.hasParam("pub-gruu")&&(e._ua.contact.pub_gruu=r.getParam("pub-gruu").replace(/"/g,"")),e._registered||(e._registered=!0,e._ua.registered({response:t}));break;case/^423$/.test(t.status_code):t.hasHeader("min-expires")?(e._expires=Number(t.getHeader("min-expires")),e._expires<10&&(e._expires=10),e._registering=!1,e.register()):(f.debug("423 response received for REGISTER without Min-Expires"),e._registrationFailure(t,u.causes.SIP_FAILURE_CODE));break;default:var s=l.sipErrorCause(t.status_code);e._registrationFailure(t,s)}}});this._registering=!0,i.send()}}},{key:"unregister",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(this._registered){this._registered=!1,null!==this._registrationTimer&&(clearTimeout(this._registrationTimer),this._registrationTimer=null);var n=this._extraHeaders.slice();t.all?n.push("Contact: *".concat(this._extraContactParams)):n.push("Contact: ".concat(this._contact,";expires=0").concat(this._extraContactParams)),n.push("Expires: 0");var r=new a.OutgoingRequest(u.REGISTER,this._registrar,this._ua,{to_uri:this._to_uri,call_id:this._call_id,cseq:this._cseq+=1},n);new c(this._ua,r,{onRequestTimeout:function(){e._unregistered(null,u.causes.REQUEST_TIMEOUT)},onTransportError:function(){e._unregistered(null,u.causes.CONNECTION_ERROR)},onAuthenticated:function(){e._cseq+=1},onReceiveResponse:function(t){switch(!0){case/^1[0-9]{2}$/.test(t.status_code):break;case/^2[0-9]{2}$/.test(t.status_code):e._unregistered(t);break;default:var n=l.sipErrorCause(t.status_code);e._unregistered(t,n)}}}).send()}else f.debug("already unregistered")}},{key:"close",value:function(){this._registered&&this.unregister()}},{key:"onTransportClosed",value:function(){this._registering=!1,null!==this._registrationTimer&&(clearTimeout(this._registrationTimer),this._registrationTimer=null),this._registered&&(this._registered=!1,this._ua.unregistered({}))}},{key:"_registrationFailure",value:function(e,t){this._registering=!1,this._ua.registrationFailed({response:e||null,cause:t}),this._registered&&(this._registered=!1,this._ua.unregistered({response:e||null,cause:t}))}},{key:"_unregistered",value:function(e,t){this._registering=!1,this._registered=!1,this._ua.unregistered({response:e||null,cause:t||null})}}])&&i(e.prototype,t),n&&i(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,n}()},{"./Constants":2,"./Logger":9,"./RequestSender":20,"./SIPMessage":21,"./Utils":28}],20:[function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t){for(var n=0;n=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,l=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return s=e.done,e},e:function(e){l=!0,o=e},f:function(){try{s||null==n.return||n.return()}finally{if(l)throw o}}}}function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n")),this.setHeader("via",""),this.setHeader("max-forwards",m.MAX_FORWARDS);var l=i.to_uri||n,u=i.to_tag?{tag:i.to_tag}:null,a=void 0!==i.to_display_name?i.to_display_name:null;this.to=new g(l,a,u),this.setHeader("to",this.to.toString());var f,h=i.from_uri||r.configuration.uri,d={tag:i.from_tag||v.newTag()};f=void 0!==i.from_display_name?i.from_display_name:r.configuration.display_name?r.configuration.display_name:null,this.from=new g(h,f,d),this.setHeader("from",this.from.toString());var _=i.call_id||r.configuration.jssip_id+v.createRandomToken(15);this.call_id=_,this.setHeader("call-id",_);var p=i.cseq||Math.floor(1e4*Math.random());this.cseq=p,this.setHeader("cseq","".concat(p," ").concat(t))}return h(e,[{key:"setHeader",value:function(e,t){for(var n=new RegExp("^\\s*".concat(e,"\\s*:"),"i"),r=0;r1&&void 0!==arguments[1]?arguments[1]:0;if(e=v.headerize(e),this.headers[e]){if(!(t>=this.headers[e].length)){var n=this.headers[e][t],r=n.raw;if(n.parsed)return n.parsed;var i=y.parse(r,e.replace(/-/g,"_"));return-1===i?(this.headers[e].splice(t,1),void T.debug('error parsing "'.concat(e,'" header field with value "').concat(r,'"'))):(n.parsed=i,i)}T.debug('not so many "'.concat(e,'" headers present'))}else T.debug('header "'.concat(e,'" not present'))}},{key:"s",value:function(e,t){return this.parseHeader(e,t)}},{key:"setHeader",value:function(e,t){var n={raw:t};this.headers[v.headerize(e)]=[n]}},{key:"parseSDP",value:function(e){return!e&&this.sdp?this.sdp:(this.sdp=_.parse(this.body||""),this.sdp)}},{key:"toString",value:function(){return this.data}}])}(),E=function(e){function t(e){var n;return c(this,t),(n=r(this,t)).ua=e,n.headers={},n.ruri=null,n.transport=null,n.server_transaction=null,n}return o(t,C),h(t,[{key:"reply",value:function(e,t,n,r,i,o){var s=[],l=this.getHeader("To");if(t=t||null,!(e=e||null)||e<100||e>699)throw new TypeError("Invalid status_code: ".concat(e));if(t&&"string"!=typeof t&&!(t instanceof String))throw new TypeError("Invalid reason_phrase: ".concat(t));t=t||m.REASON_PHRASE[e]||"",n=v.cloneArray(n),this.ua.configuration.extra_headers&&(n=n.concat(this.ua.configuration.extra_headers));var a="SIP/2.0 ".concat(e," ").concat(t,"\r\n");if(this.method===m.INVITE&&e>100&&e<=200){var c,f=u(this.getHeaders("record-route"));try{for(f.s();!(c=f.n()).done;){var h=c.value;a+="Record-Route: ".concat(h,"\r\n")}}catch(e){f.e(e)}finally{f.f()}}var d,_=u(this.getHeaders("via"));try{for(_.s();!(d=_.n()).done;){var p=d.value;a+="Via: ".concat(p,"\r\n")}}catch(e){_.e(e)}finally{_.f()}!this.to_tag&&e>100?l+=";tag=".concat(v.newTag()):this.to_tag&&!this.s("to").hasParam("tag")&&(l+=";tag=".concat(this.to_tag)),a+="To: ".concat(l,"\r\n"),a+="From: ".concat(this.getHeader("From"),"\r\n"),a+="Call-ID: ".concat(this.call_id,"\r\n"),a+="CSeq: ".concat(this.cseq," ").concat(this.method,"\r\n");var g,y=u(n);try{for(y.s();!(g=y.n()).done;){var T=g.value;a+="".concat(T.trim(),"\r\n")}}catch(e){y.e(e)}finally{y.f()}switch(this.method){case m.INVITE:this.ua.configuration.session_timers&&s.push("timer"),(this.ua.contact.pub_gruu||this.ua.contact.temp_gruu)&&s.push("gruu"),s.push("ice","replaces");break;case m.UPDATE:this.ua.configuration.session_timers&&s.push("timer"),r&&s.push("ice"),s.push("replaces")}if(s.push("outbound"),this.method===m.OPTIONS?(a+="Allow: ".concat(m.ALLOWED_METHODS,"\r\n"),a+="Accept: ".concat(m.ACCEPTED_BODY_TYPES,"\r\n")):405===e?a+="Allow: ".concat(m.ALLOWED_METHODS,"\r\n"):415===e&&(a+="Accept: ".concat(m.ACCEPTED_BODY_TYPES,"\r\n")),a+="Supported: ".concat(s,"\r\n"),r){var b=v.str_utf8_length(r);a+="Content-Type: application/sdp\r\n",a+="Content-Length: ".concat(b,"\r\n\r\n"),a+=r}else a+="Content-Length: ".concat(0,"\r\n\r\n");this.server_transaction.receiveResponse(e,a,i,o)}},{key:"reply_sl",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=this.getHeaders("via");if(!e||e<100||e>699)throw new TypeError("Invalid status_code: ".concat(e));if(t&&"string"!=typeof t&&!(t instanceof String))throw new TypeError("Invalid reason_phrase: ".concat(t));t=t||m.REASON_PHRASE[e]||"";var r,i="SIP/2.0 ".concat(e," ").concat(t,"\r\n"),o=u(n);try{for(o.s();!(r=o.n()).done;){var s=r.value;i+="Via: ".concat(s,"\r\n")}}catch(e){o.e(e)}finally{o.f()}var l=this.getHeader("To");if(!this.to_tag&&e>100?l+=";tag=".concat(v.newTag()):this.to_tag&&!this.s("to").hasParam("tag")&&(l+=";tag=".concat(this.to_tag)),i+="To: ".concat(l,"\r\n"),i+="From: ".concat(this.getHeader("From"),"\r\n"),i+="Call-ID: ".concat(this.call_id,"\r\n"),i+="CSeq: ".concat(this.cseq," ").concat(this.method,"\r\n"),this.ua.configuration.extra_headers){var a,c=u(this.ua.configuration.extra_headers);try{for(c.s();!(a=c.n()).done;){var f=a.value;i+="".concat(f.trim(),"\r\n")}}catch(e){c.e(e)}finally{c.f()}}i+="Content-Length: ".concat(0,"\r\n\r\n"),this.transport.send(i)}}])}(),A=function(e){function t(){var e;return c(this,t),(e=r(this,t)).headers={},e.status_code=null,e.reason_phrase=null,e}return o(t,C),h(t)}();t.exports={OutgoingRequest:b,InitialOutgoingInviteRequest:S,IncomingRequest:E,IncomingResponse:A}},{"./Constants":2,"./Grammar":7,"./Logger":9,"./NameAddrHeader":11,"./Utils":28,"sdp-transform":37}],22:[function(e,t,n){"use strict";var r=e("./Logger"),i=e("./Utils"),o=e("./Grammar"),s=new r("Socket");n.isSocket=function(e){if(Array.isArray(e))return!1;if(void 0===e)return s.warn("undefined JsSIP.Socket instance"),!1;try{if(!i.isString(e.url))throw s.warn("missing or invalid JsSIP.Socket url property"),new Error("Missing or invalid JsSIP.Socket url property");if(!i.isString(e.via_transport))throw s.warn("missing or invalid JsSIP.Socket via_transport property"),new Error("Missing or invalid JsSIP.Socket via_transport property");if(-1===o.parse(e.sip_uri,"SIP_URI"))throw s.warn("missing or invalid JsSIP.Socket sip_uri property"),new Error("missing or invalid JsSIP.Socket sip_uri property")}catch(e){return!1}try{["connect","disconnect","send"].forEach(function(t){if(!i.isFunction(e[t]))throw s.warn("missing or invalid JsSIP.Socket method: ".concat(t)),new Error("Missing or invalid JsSIP.Socket method: ".concat(t))})}catch(e){return!1}return!0}},{"./Grammar":7,"./Logger":9,"./Utils":28}],23:[function(e,t,n){"use strict";var r=500;t.exports={T1:r,T2:4e3,T4:5e3,TIMER_B:32e3,TIMER_D:0,TIMER_F:32e3,TIMER_H:32e3,TIMER_I:0,TIMER_J:0,TIMER_K:0,TIMER_L:32e3,TIMER_M:32e3,PROVISIONAL_RESPONSE_INTERVAL:6e4}},{}],24:[function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){for(var n=0;n=100&&n<=199)switch(this.state){case S.STATUS_CALLING:this.stateChanged(S.STATUS_PROCEEDING),this.eventHandlers.onReceiveResponse(e);break;case S.STATUS_PROCEEDING:this.eventHandlers.onReceiveResponse(e)}else if(n>=200&&n<=299)switch(this.state){case S.STATUS_CALLING:case S.STATUS_PROCEEDING:this.stateChanged(S.STATUS_ACCEPTED),this.M=setTimeout(function(){t.timer_M()},m.TIMER_M),this.eventHandlers.onReceiveResponse(e);break;case S.STATUS_ACCEPTED:this.eventHandlers.onReceiveResponse(e)}else if(n>=300&&n<=699)switch(this.state){case S.STATUS_CALLING:case S.STATUS_PROCEEDING:this.stateChanged(S.STATUS_COMPLETED),this.sendACK(e),this.eventHandlers.onReceiveResponse(e);break;case S.STATUS_COMPLETED:this.sendACK(e)}}}])}(),A=function(e){function t(e,n,r,o){var s;i(this,t),(s=u(this,t)).id="z9hG4bK".concat(Math.floor(1e7*Math.random())),s.transport=n,s.request=r,s.eventHandlers=o;var l="SIP/2.0/".concat(n.via_transport);return l+=" ".concat(e.configuration.via_host,";branch=").concat(s.id),s.request.setHeader("via",l),s}return c(t,h),s(t,[{key:"C",get:function(){return S}},{key:"send",value:function(){this.transport.send(this.request)||this.onTransportError()}},{key:"onTransportError",value:function(){y.debug("transport error occurred for transaction ".concat(this.id)),this.eventHandlers.onTransportError()}}])}(),w=function(e){function t(e,n,r){var o;return i(this,t),(o=u(this,t)).type=S.NON_INVITE_SERVER,o.id=r.via_branch,o.ua=e,o.transport=n,o.request=r,o.last_response="",r.server_transaction=o,o.state=S.STATUS_TRYING,e.newTransaction(o),o}return c(t,h),s(t,[{key:"C",get:function(){return S}},{key:"stateChanged",value:function(e){this.state=e,this.emit("stateChanged")}},{key:"timer_J",value:function(){T.debug("Timer J expired for transaction ".concat(this.id)),this.stateChanged(S.STATUS_TERMINATED),this.ua.destroyTransaction(this)}},{key:"onTransportError",value:function(){this.transportError||(this.transportError=!0,T.debug("transport error occurred, deleting transaction ".concat(this.id)),clearTimeout(this.J),this.stateChanged(S.STATUS_TERMINATED),this.ua.destroyTransaction(this))}},{key:"receiveResponse",value:function(e,t,n,r){var i=this;if(100===e)switch(this.state){case S.STATUS_TRYING:this.stateChanged(S.STATUS_PROCEEDING),this.transport.send(t)||this.onTransportError();break;case S.STATUS_PROCEEDING:this.last_response=t,this.transport.send(t)?n&&n():(this.onTransportError(),r&&r())}else if(e>=200&&e<=699)switch(this.state){case S.STATUS_TRYING:case S.STATUS_PROCEEDING:this.stateChanged(S.STATUS_COMPLETED),this.last_response=t,this.J=setTimeout(function(){i.timer_J()},m.TIMER_J),this.transport.send(t)?n&&n():(this.onTransportError(),r&&r());break;case S.STATUS_COMPLETED:}}}])}(),R=function(e){function t(e,n,r){var o;return i(this,t),(o=u(this,t)).type=S.INVITE_SERVER,o.id=r.via_branch,o.ua=e,o.transport=n,o.request=r,o.last_response="",r.server_transaction=o,o.state=S.STATUS_PROCEEDING,e.newTransaction(o),o.resendProvisionalTimer=null,r.reply(100),o}return c(t,h),s(t,[{key:"C",get:function(){return S}},{key:"stateChanged",value:function(e){this.state=e,this.emit("stateChanged")}},{key:"timer_H",value:function(){b.debug("Timer H expired for transaction ".concat(this.id)),this.state===S.STATUS_COMPLETED&&b.debug("ACK not received, dialog will be terminated"),this.stateChanged(S.STATUS_TERMINATED),this.ua.destroyTransaction(this)}},{key:"timer_I",value:function(){this.stateChanged(S.STATUS_TERMINATED),this.ua.destroyTransaction(this)}},{key:"timer_L",value:function(){b.debug("Timer L expired for transaction ".concat(this.id)),this.state===S.STATUS_ACCEPTED&&(this.stateChanged(S.STATUS_TERMINATED),this.ua.destroyTransaction(this))}},{key:"onTransportError",value:function(){this.transportError||(this.transportError=!0,b.debug("transport error occurred, deleting transaction ".concat(this.id)),null!==this.resendProvisionalTimer&&(clearInterval(this.resendProvisionalTimer),this.resendProvisionalTimer=null),clearTimeout(this.L),clearTimeout(this.H),clearTimeout(this.I),this.stateChanged(S.STATUS_TERMINATED),this.ua.destroyTransaction(this))}},{key:"resend_provisional",value:function(){this.transport.send(this.last_response)||this.onTransportError()}},{key:"receiveResponse",value:function(e,t,n,r){var i=this;if(e>=100&&e<=199)switch(this.state){case S.STATUS_PROCEEDING:this.transport.send(t)||this.onTransportError(),this.last_response=t}if(e>100&&e<=199&&this.state===S.STATUS_PROCEEDING)null===this.resendProvisionalTimer&&(this.resendProvisionalTimer=setInterval(function(){i.resend_provisional()},m.PROVISIONAL_RESPONSE_INTERVAL));else if(e>=200&&e<=299)switch(this.state){case S.STATUS_PROCEEDING:this.stateChanged(S.STATUS_ACCEPTED),this.last_response=t,this.L=setTimeout(function(){i.timer_L()},m.TIMER_L),null!==this.resendProvisionalTimer&&(clearInterval(this.resendProvisionalTimer),this.resendProvisionalTimer=null);case S.STATUS_ACCEPTED:this.transport.send(t)?n&&n():(this.onTransportError(),r&&r())}else if(e>=300&&e<=699)switch(this.state){case S.STATUS_PROCEEDING:null!==this.resendProvisionalTimer&&(clearInterval(this.resendProvisionalTimer),this.resendProvisionalTimer=null),this.transport.send(t)?(this.stateChanged(S.STATUS_COMPLETED),this.H=setTimeout(function(){i.timer_H()},m.TIMER_H),n&&n()):(this.onTransportError(),r&&r())}}}])}();t.exports={C:S,NonInviteClientTransaction:C,InviteClientTransaction:E,AckClientTransaction:A,NonInviteServerTransaction:w,InviteServerTransaction:R,checkTransaction:function(e,t){var n,r=e._transactions;switch(t.method){case _.INVITE:if(n=r.ist[t.via_branch]){switch(n.state){case S.STATUS_PROCEEDING:n.transport.send(n.last_response);break;case S.STATUS_ACCEPTED:}return!0}break;case _.ACK:if(!(n=r.ist[t.via_branch]))return!1;if(n.state===S.STATUS_ACCEPTED)return!1;if(n.state===S.STATUS_COMPLETED)return n.state=S.STATUS_CONFIRMED,n.I=setTimeout(function(){n.timer_I()},m.TIMER_I),!0;break;case _.CANCEL:return(n=r.ist[t.via_branch])?(t.reply_sl(200),n.state!==S.STATUS_PROCEEDING):(t.reply_sl(481),!0);default:if(n=r.nist[t.via_branch]){switch(n.state){case S.STATUS_TRYING:break;case S.STATUS_PROCEEDING:case S.STATUS_COMPLETED:n.transport.send(n.last_response)}return!0}}}}},{"./Constants":2,"./Logger":9,"./SIPMessage":21,"./Timers":23,events:31}],25:[function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:c.recovery_options;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),a.debug("new()"),this.status=c.STATUS_DISCONNECTED,this.socket=null,this.sockets=[],this.recovery_options=n,this.recover_attempts=0,this.recovery_timer=null,this.close_requested=!1;try{this.textDecoder=new TextDecoder("utf8")}catch(e){a.warn("cannot use TextDecoder: ".concat(e))}if(void 0===t)throw new TypeError("Invalid argument. undefined 'sockets' argument");t instanceof Array||(t=[t]),t.forEach(function(e){if(!l.isSocket(e.socket))throw new TypeError("Invalid argument. invalid 'JsSIP.Socket' instance");if(e.weight&&!Number(e.weight))throw new TypeError("Invalid argument. 'weight' attribute is not a number");this.sockets.push({socket:e.socket,weight:e.weight||0,status:c.SOCKET_STATUS_READY})},this),this._getSocket()},(t=[{key:"via_transport",get:function(){return this.socket.via_transport}},{key:"url",get:function(){return this.socket.url}},{key:"sip_uri",get:function(){return this.socket.sip_uri}},{key:"connect",value:function(){a.debug("connect()"),this.isConnected()?a.debug("Transport is already connected"):this.isConnecting()?a.debug("Transport is connecting"):(this.close_requested=!1,this.status=c.STATUS_CONNECTING,this.onconnecting({socket:this.socket,attempts:this.recover_attempts}),this.close_requested||(this.socket.onconnect=this._onConnect.bind(this),this.socket.ondisconnect=this._onDisconnect.bind(this),this.socket.ondata=this._onData.bind(this),this.socket.connect()))}},{key:"disconnect",value:function(){a.debug("close()"),this.close_requested=!0,this.recover_attempts=0,this.status=c.STATUS_DISCONNECTED,null!==this.recovery_timer&&(clearTimeout(this.recovery_timer),this.recovery_timer=null),this.socket.onconnect=function(){},this.socket.ondisconnect=function(){},this.socket.ondata=function(){},this.socket.disconnect(),this.ondisconnect({socket:this.socket,error:!1})}},{key:"send",value:function(e){if(a.debug("send()"),!this.isConnected())return a.warn("unable to send message, transport is not connected"),!1;var t=e.toString();return a.debug("sending message:\n\n".concat(t,"\n")),this.socket.send(t)}},{key:"isConnected",value:function(){return this.status===c.STATUS_CONNECTED}},{key:"isConnecting",value:function(){return this.status===c.STATUS_CONNECTING}},{key:"_reconnect",value:function(){var e=this;this.recover_attempts+=1;var t=Math.floor(Math.random()*Math.pow(2,this.recover_attempts)+1);tthis.recovery_options.max_interval&&(t=this.recovery_options.max_interval),a.debug("reconnection attempt: ".concat(this.recover_attempts,". next connection attempt in ").concat(t," seconds")),this.recovery_timer=setTimeout(function(){e.close_requested||e.isConnected()||e.isConnecting()||(e._getSocket(),e.connect())},1e3*t)}},{key:"_getSocket",value:function(){var e=[];if(this.sockets.forEach(function(t){t.status!==c.SOCKET_STATUS_ERROR&&(0===e.length?e.push(t):t.weight>e[0].weight?e=[t]:t.weight===e[0].weight&&e.push(t))}),0===e.length)return this.sockets.forEach(function(e){e.status=c.SOCKET_STATUS_READY}),void this._getSocket();var t=Math.floor(Math.random()*e.length);this.socket=e[t].socket}},{key:"_onConnect",value:function(){this.recover_attempts=0,this.status=c.STATUS_CONNECTED,null!==this.recovery_timer&&(clearTimeout(this.recovery_timer),this.recovery_timer=null),this.onconnect({socket:this})}},{key:"_onDisconnect",value:function(e,t,n){this.status=c.STATUS_DISCONNECTED,this.ondisconnect({socket:this.socket,error:e,code:t,reason:n}),this.close_requested||(this.sockets.forEach(function(e){this.socket===e.socket&&(e.status=c.SOCKET_STATUS_ERROR)},this),this._reconnect(e))}},{key:"_onData",value:function(e){if("\r\n\r\n"!==e)if("\r\n"!==e){if("string"!=typeof e){try{e=this.textDecoder?this.textDecoder.decode(e):String.fromCharCode.apply(null,new Uint8Array(e))}catch(e){return void a.debug("received binary message failed to be converted into string, message discarded")}a.debug("received binary message:\n\n".concat(e,"\n"))}else a.debug("received text message:\n\n".concat(e,"\n"));this.ondata({transport:this,message:e})}else a.debug("received message with CRLF Keep Alive response");else{a.debug("received message with double-CRLF Keep Alive request");try{this.socket.send("\r\n")}catch(e){a.warn("error sending Keep Alive response: ".concat(e))}}}}])&&i(e.prototype,t),n&&i(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,n}()},{"./Constants":2,"./Logger":9,"./Socket":22}],26:[function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{},t=e.anonymous||null,n=e.outbound||null,r="<";return r+=t?this.temp_gruu||"sip:anonymous@anonymous.invalid;transport=ws":this.pub_gruu||this.uri.toString(),!n||(t?this.temp_gruu:this.pub_gruu)||(r+=";ob"),r+=">"}};var r=["authorization_user","password","realm","ha1","authorization_jwt","display_name","register","extra_headers"];for(var i in this._configuration)Object.prototype.hasOwnProperty.call(this._configuration,i)&&(-1!==r.indexOf(i)?Object.defineProperty(this._configuration,i,{writable:!0,configurable:!1}):Object.defineProperty(this._configuration,i,{writable:!1,configurable:!1}));for(var o in A.debug("configuration parameters after validation:"),this._configuration)if(Object.prototype.hasOwnProperty.call(E.settings,o))switch(o){case"uri":case"registrar_server":A.debug("- ".concat(o,": ").concat(this._configuration[o]));break;case"password":case"ha1":case"authorization_jwt":A.debug("- ".concat(o,": NOT SHOWN"));break;default:A.debug("- ".concat(o,": ").concat(JSON.stringify(this._configuration[o])))}}}])&&i(n.prototype,r),o&&i(n,o),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r,o}()},{"./Config":1,"./Constants":2,"./Exceptions":6,"./Logger":9,"./Message":10,"./Options":12,"./Parser":13,"./RTCSession":14,"./Registrator":19,"./SIPMessage":21,"./Transactions":24,"./Transport":25,"./URI":27,"./Utils":28,"./sanityCheck":30,events:31}],27:[function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return o(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?o(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var s,l=!0,u=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return l=e.done,e},e:function(e){u=!0,s=e},f:function(){try{l||null==n.return||n.return()}finally{if(u)throw s}}}}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n4&&void 0!==arguments[4]?arguments[4]:{},s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),!r)throw new TypeError('missing or invalid "host" parameter');for(var l in this._parameters={},this._headers={},this._scheme=t||u.SIP,this._user=n,this._host=r,this._port=i,o)Object.prototype.hasOwnProperty.call(o,l)&&this.setParam(l,o[l]);for(var a in s)Object.prototype.hasOwnProperty.call(s,a)&&this.setHeader(a,s[a])}return t=e,r=[{key:"parse",value:function(e){return-1!==(e=c.parse(e,"SIP_URI"))?e:void 0}}],(n=[{key:"scheme",get:function(){return this._scheme},set:function(e){this._scheme=e.toLowerCase()}},{key:"user",get:function(){return this._user},set:function(e){this._user=e}},{key:"host",get:function(){return this._host},set:function(e){this._host=e.toLowerCase()}},{key:"port",get:function(){return this._port},set:function(e){this._port=0===e?e:parseInt(e,10)||null}},{key:"setParam",value:function(e,t){e&&(this._parameters[e.toLowerCase()]=null==t?null:t.toString())}},{key:"getParam",value:function(e){if(e)return this._parameters[e.toLowerCase()]}},{key:"hasParam",value:function(e){if(e)return!!this._parameters.hasOwnProperty(e.toLowerCase())}},{key:"deleteParam",value:function(e){if(e=e.toLowerCase(),this._parameters.hasOwnProperty(e)){var t=this._parameters[e];return delete this._parameters[e],t}}},{key:"clearParams",value:function(){this._parameters={}}},{key:"setHeader",value:function(e,t){this._headers[a.headerize(e)]=Array.isArray(t)?t:[t]}},{key:"getHeader",value:function(e){if(e)return this._headers[a.headerize(e)]}},{key:"hasHeader",value:function(e){if(e)return!!this._headers.hasOwnProperty(a.headerize(e))}},{key:"deleteHeader",value:function(e){if(e=a.headerize(e),this._headers.hasOwnProperty(e)){var t=this._headers[e];return delete this._headers[e],t}}},{key:"clearHeaders",value:function(){this._headers={}}},{key:"clone",value:function(){return new e(this._scheme,this._user,this._host,this._port,JSON.parse(JSON.stringify(this._parameters)),JSON.parse(JSON.stringify(this._headers)))}},{key:"toString",value:function(){var e=[],t="".concat(this._scheme,":");for(var n in this._user&&(t+="".concat(a.escapeUser(this._user),"@")),t+=this._host,(this._port||0===this._port)&&(t+=":".concat(this._port)),this._parameters)Object.prototype.hasOwnProperty.call(this._parameters,n)&&(t+=";".concat(n),null!==this._parameters[n]&&(t+="=".concat(this._parameters[n])));for(var r in this._headers)if(Object.prototype.hasOwnProperty.call(this._headers,r)){var o,s=i(this._headers[r]);try{for(s.s();!(o=s.n()).done;){var l=o.value;e.push("".concat(r,"=").concat(l))}}catch(e){s.e(e)}finally{s.f()}}return e.length>0&&(t+="?".concat(e.join("&"))),t}},{key:"toAor",value:function(e){var t="".concat(this._scheme,":");return this._user&&(t+="".concat(a.escapeUser(this._user),"@")),t+=this._host,e&&(this._port||0===this._port)&&(t+=":".concat(this._port)),t}}])&&s(t.prototype,n),r&&s(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,n,r}()},{"./Constants":2,"./Grammar":7,"./Utils":28}],28:[function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return o(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?o(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var s,l=!0,u=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return l=e.done,e},e:function(e){u=!0,s=e},f:function(){try{l||null==n.return||n.return()}finally{if(u)throw s}}}}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n1?t-1:0),r=1;r1&&void 0!==arguments[1]?arguments[1]:32,r="";for(t=0;t>>32-t}function n(e,t){var n=2147483648&e,r=2147483648&t,i=1073741824&e,o=1073741824&t,s=(1073741823&e)+(1073741823&t);return i&o?2147483648^s^n^r:i|o?1073741824&s?3221225472^s^n^r:1073741824^s^n^r:s^n^r}function r(e,r,i,o,s,l,u){return e=n(e,n(n(function(e,t,n){return e&t|~e&n}(r,i,o),s),u)),n(t(e,l),r)}function i(e,r,i,o,s,l,u){return e=n(e,n(n(function(e,t,n){return e&n|t&~n}(r,i,o),s),u)),n(t(e,l),r)}function o(e,r,i,o,s,l,u){return e=n(e,n(n(function(e,t,n){return e^t^n}(r,i,o),s),u)),n(t(e,l),r)}function s(e,r,i,o,s,l,u){return e=n(e,n(n(function(e,t,n){return t^(e|~n)}(r,i,o),s),u)),n(t(e,l),r)}function l(e){var t,n="",r="";for(t=0;t<=3;t++)n+=(r="0".concat((e>>>8*t&255).toString(16))).substr(r.length-2,2);return n}var u,a,c,f,h,d,_,p,m,v;for(u=function(e){for(var t,n=e.length,r=n+8,i=16*((r-r%64)/64+1),o=new Array(i-1),s=0,l=0;l>>29,o}(e=function(e){for(var t="",n=0;n127&&r<2048?(t+=String.fromCharCode(r>>6|192),t+=String.fromCharCode(63&r|128)):(t+=String.fromCharCode(r>>12|224),t+=String.fromCharCode(r>>6&63|128),t+=String.fromCharCode(63&r|128))}return t}(e)),_=1732584193,p=4023233417,m=2562383102,v=271733878,a=0;a1&&void 0!==arguments[1]?arguments[1]:{};return e&&Object.assign({},e)||t}},{"./Constants":2,"./Grammar":7,"./URI":27}],29:[function(e,t,n){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t){for(var n=0;n=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var s,l=!0,u=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return l=e.done,e},e:function(e){u=!0,s=e},f:function(){try{l||null==n.return||n.return()}finally{if(u)throw s}}}}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n1)return h.debug("more than one Via header field present in the response, dropping the response"),!1},function(){var e=f.str_utf8_length(o.body),t=o.getHeader("content-length");if(e0&&l.length>o){l.warned=!0;var u=new Error("Possible EventEmitter memory leak detected. "+l.length+' "'+String(t)+'" listeners added. Use emitter.setMaxListeners() to increase limit.');u.name="MaxListenersExceededWarning",u.emitter=e,u.type=t,u.count=l.length,"object"==typeof console&&console.warn&&console.warn("%s: %s",u.name,u.message)}}else l=s[t]=n,++e._eventsCount;return e}function h(){if(!this.fired)switch(this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length){case 0:return this.listener.call(this.target);case 1:return this.listener.call(this.target,arguments[0]);case 2:return this.listener.call(this.target,arguments[0],arguments[1]);case 3:return this.listener.call(this.target,arguments[0],arguments[1],arguments[2]);default:for(var e=new Array(arguments.length),t=0;t1&&(t=arguments[1]),t instanceof Error)throw t;var u=new Error('Unhandled "error" event. ('+t+")");throw u.context=t,u}if(!(n=s[e]))return!1;var a="function"==typeof n;switch(r=arguments.length){case 1:!function(e,t,n){if(t)e.call(n);else for(var r=e.length,i=m(e,r),o=0;o=0;s--)if(n[s]===t||n[s].listener===t){l=n[s].listener,o=s;break}if(o<0)return this;0===o?n.shift():function(e,t){for(var n=t,r=n+1,i=e.length;r=0;o--)this.removeListener(e,t[o]);return this},s.prototype.listeners=function(e){return _(this,e,!0)},s.prototype.rawListeners=function(e){return _(this,e,!1)},s.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):p.call(e,t)},s.prototype.listenerCount=p,s.prototype.eventNames=function(){return this._eventsCount>0?Reflect.ownKeys(this._events):[]}},{}],32:[function(e,t,n){(function(r){(function(){n.formatArgs=function(e){if(e[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+e[0]+(this.useColors?"%c ":" ")+"+"+t.exports.humanize(this.diff),!this.useColors)return;const n="color: "+this.color;e.splice(1,0,n,"color: inherit");let r=0,i=0;e[0].replace(/%[a-zA-Z%]/g,e=>{"%%"!==e&&(r++,"%c"===e&&(i=r))}),e.splice(i,0,n)},n.save=function(e){try{e?n.storage.setItem("debug",e):n.storage.removeItem("debug")}catch(e){}},n.load=function(){let e;try{e=n.storage.getItem("debug")}catch(e){}!e&&void 0!==r&&"env"in r&&(e=r.env.DEBUG);return e},n.useColors=function(){if("undefined"!=typeof window&&window.process&&("renderer"===window.process.type||window.process.__nwjs))return!0;if("undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;return"undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)},n.storage=function(){try{return localStorage}catch(e){}}(),n.destroy=(()=>{let e=!1;return()=>{e||(e=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),n.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],n.log=console.debug||console.log||(()=>{}),t.exports=e("./common")(n);const{formatters:i}=t.exports;i.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}}).call(this)}).call(this,e("_process"))},{"./common":33,_process:35}],33:[function(e,t,n){t.exports=function(t){function n(e){let t,i,o,s=null;function l(...e){if(!l.enabled)return;const r=l,i=Number(new Date),o=i-(t||i);r.diff=o,r.prev=t,r.curr=i,t=i,e[0]=n.coerce(e[0]),"string"!=typeof e[0]&&e.unshift("%O");let s=0;e[0]=e[0].replace(/%([a-zA-Z%])/g,(t,i)=>{if("%%"===t)return"%";s++;const o=n.formatters[i];if("function"==typeof o){const n=e[s];t=o.call(r,n),e.splice(s,1),s--}return t}),n.formatArgs.call(r,e),(r.log||n.log).apply(r,e)}return l.namespace=e,l.useColors=n.useColors(),l.color=n.selectColor(e),l.extend=r,l.destroy=n.destroy,Object.defineProperty(l,"enabled",{enumerable:!0,configurable:!1,get:()=>null!==s?s:(i!==n.namespaces&&(i=n.namespaces,o=n.enabled(e)),o),set:e=>{s=e}}),"function"==typeof n.init&&n.init(l),l}function r(e,t){const r=n(this.namespace+(void 0===t?":":t)+e);return r.log=this.log,r}function i(e){return e.toString().substring(2,e.toString().length-2).replace(/\.\*\?$/,"*")}return n.debug=n,n.default=n,n.coerce=function(e){return e instanceof Error?e.stack||e.message:e},n.disable=function(){const e=[...n.names.map(i),...n.skips.map(i).map(e=>"-"+e)].join(",");return n.enable(""),e},n.enable=function(e){let t;n.save(e),n.namespaces=e,n.names=[],n.skips=[];const r=("string"==typeof e?e:"").split(/[\s,]+/),i=r.length;for(t=0;t{n[e]=t[e]}),n.names=[],n.skips=[],n.formatters={},n.selectColor=function(e){let t=0;for(let n=0;n=1.5*n;return Math.round(e/n)+" "+r+(i?"s":"")}t.exports=function(e,t){t=t||{};var n=typeof e;if("string"===n&&e.length>0)return function(e){if((e=String(e)).length>100)return;var t=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(!t)return;var n=parseFloat(t[1]);switch((t[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return n*u;case"weeks":case"week":case"w":return n*l;case"days":case"day":case"d":return n*s;case"hours":case"hour":case"hrs":case"hr":case"h":return n*o;case"minutes":case"minute":case"mins":case"min":case"m":return n*i;case"seconds":case"second":case"secs":case"sec":case"s":return n*r;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return n;default:return}}(e);if("number"===n&&isFinite(e))return t.long?function(e){var t=Math.abs(e);if(t>=s)return a(e,t,s,"day");if(t>=o)return a(e,t,o,"hour");if(t>=i)return a(e,t,i,"minute");if(t>=r)return a(e,t,r,"second");return e+" ms"}(e):function(e){var t=Math.abs(e);if(t>=s)return Math.round(e/s)+"d";if(t>=o)return Math.round(e/o)+"h";if(t>=i)return Math.round(e/i)+"m";if(t>=r)return Math.round(e/r)+"s";return e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},{}],35:[function(e,t,n){var r,i,o=t.exports={};function s(){throw new Error("setTimeout has not been defined")}function l(){throw new Error("clearTimeout has not been defined")}function u(e){if(r===setTimeout)return setTimeout(e,0);if((r===s||!r)&&setTimeout)return r=setTimeout,setTimeout(e,0);try{return r(e,0)}catch(t){try{return r.call(null,e,0)}catch(t){return r.call(this,e,0)}}}!function(){try{r="function"==typeof setTimeout?setTimeout:s}catch(e){r=s}try{i="function"==typeof clearTimeout?clearTimeout:l}catch(e){i=l}}();var a,c=[],f=!1,h=-1;function d(){f&&a&&(f=!1,a.length?c=a.concat(c):h=-1,c.length&&_())}function _(){if(!f){var e=u(d);f=!0;for(var t=c.length;t;){for(a=c,c=[];++h1)for(var n=1;n1&&(e[n[0]]=void 0),e};n.parseParams=function(e){return e.split(/;\s?/).reduce(l,{})},n.parseFmtpConfig=n.parseParams,n.parsePayloads=function(e){return e.toString().split(" ").map(Number)},n.parseRemoteCandidates=function(e){for(var t=[],n=e.split(" ").map(r),i=0;i=r)return e;var i=n[t];switch(t+=1,e){case"%%":return"%";case"%s":return String(i);case"%d":return Number(i);case"%v":return""}})}.apply(null,r)},s=["v","o","s","i","u","e","p","c","b","t","r","z","a"],l=["i","c","b","a"];t.exports=function(e,t){t=t||{},null==e.version&&(e.version=0),null==e.name&&(e.name=" "),e.media.forEach(function(e){null==e.payloads&&(e.payloads="")});var n=t.outerOrder||s,i=t.innerOrder||l,u=[];return n.forEach(function(t){r[t].forEach(function(n){n.name in e&&null!=e[n.name]?u.push(o(t,n,e)):n.push in e&&null!=e[n.push]&&e[n.push].forEach(function(e){u.push(o(t,n,e))})})}),e.media.forEach(function(e){u.push(o("m",r.m[0],e)),i.forEach(function(t){r[t].forEach(function(n){n.name in e&&null!=e[n.name]?u.push(o(t,n,e)):n.push in e&&null!=e[n.push]&&e[n.push].forEach(function(e){u.push(o(t,n,e))})})})}),u.join("\r\n")+"\r\n"}},{"./grammar":36}],40:[function(e,t,n){t.exports={name:"jssip",title:"JsSIP",description:"the Javascript SIP library",version:"3.10.1",homepage:"https://jssip.net",contributors:["José Luis Millán (https://github.com/jmillan)","Iñaki Baz Castillo (https://inakibaz.me)"],types:"lib/JsSIP.d.ts",main:"lib-es5/JsSIP.js",keywords:["sip","websocket","webrtc","node","browser","library"],license:"MIT",repository:{type:"git",url:"https://github.com/versatica/JsSIP.git"},bugs:{url:"https://github.com/versatica/JsSIP/issues"},dependencies:{"@types/debug":"^4.1.7","@types/events":"^3.0.0",debug:"^4.3.1",events:"^3.3.0","gulp-cli":"^3.0.0","sdp-transform":"^2.14.1"},devDependencies:{"@babel/core":"^7.19.6","@babel/preset-env":"^7.19.4","ansi-colors":"^3.2.4",browserify:"^16.5.1",eslint:"^5.16.0","fancy-log":"^1.3.3",gulp:"^4.0.2","gulp-babel":"^8.0.0","gulp-eslint":"^5.0.0","gulp-expect-file":"^1.0.2","gulp-header":"^2.0.9","gulp-nodeunit-runner":"^0.2.2","gulp-plumber":"^1.2.1","gulp-rename":"^1.4.0","gulp-uglify-es":"^1.0.4",pegjs:"^0.7.0","vinyl-buffer":"^1.0.1","vinyl-source-stream":"^2.0.0"},scripts:{lint:"node npm-scripts.js lint",test:"node npm-scripts.js test",prepublish:"node npm-scripts.js prepublish",release:"node npm-scripts.js release"}}},{}]},{},[8])(8)}); \ No newline at end of file diff --git a/lib/RTCSession.js b/lib/RTCSession.js index 7a1dfd63..bd9ebc7c 100644 --- a/lib/RTCSession.js +++ b/lib/RTCSession.js @@ -663,6 +663,14 @@ module.exports = class RTCSession extends EventEmitter // Audio and/or video requested, prompt getUserMedia. else if (mediaConstraints.audio || mediaConstraints.video) { + if ( ! navigator.mediaDevices ) + { + const error = new Error('Media inaccessible; Secure context required (eg. https://, file://)'); + + //this._failed('local', null, JsSIP_C.causes.USER_DENIED_MEDIA_ACCESS); + //this.emit('getusermediafailed', error); + throw error; + } this._localMediaStreamLocallyGenerated = true; return navigator.mediaDevices.getUserMedia(mediaConstraints) @@ -793,12 +801,12 @@ module.exports = class RTCSession extends EventEmitter }) .catch((error) => { + logger.warn(`getUserMedia error: ${JSON.stringify(error)}`); if (this._status === C.STATUS_TERMINATED) { return; } - - logger.warn(error); + throw error; }); } @@ -2630,11 +2638,28 @@ module.exports = class RTCSession extends EventEmitter // Request for user media access. else if (mediaConstraints.audio || mediaConstraints.video) { + if ( ! navigator.mediaDevices ) + { + const error = new Error('Media inaccessible; Secure context required (eg. https://, file://)'); + + //this._failed('local', null, JsSIP_C.causes.USER_DENIED_MEDIA_ACCESS); + //this.emit('getusermediafailed', error); + throw error; + } this._localMediaStreamLocallyGenerated = true; + logger.warn(`getUserMedia requesting ${JSON.stringify( mediaConstraints )} from ${JSON.stringify( navigator.mediaDevices )}`); + return navigator.mediaDevices.getUserMedia(mediaConstraints) + .then((stream) => + { + logger.warn(`getUserMedia gives ${JSON.stringify( stream )}`); + + return stream; + }) .catch((error) => { + logger.warn(`getUserMedia error ${JSON.stringify( error )}`); if (this._status === C.STATUS_TERMINATED) { throw new Error('terminated'); @@ -2652,6 +2677,7 @@ module.exports = class RTCSession extends EventEmitter }) .then((stream) => { + logger.warn(`getUserMedia returned stream ${JSON.stringify( stream )}`); if (this._status === C.STATUS_TERMINATED) { throw new Error('terminated'); @@ -2699,12 +2725,12 @@ module.exports = class RTCSession extends EventEmitter }) .catch((error) => { + logger.warn(`getUserMedia error: ${JSON.stringify(error)}`); if (this._status === C.STATUS_TERMINATED) { return; } - - logger.warn(error); + throw error; }); } diff --git a/package.json b/package.json index 4e65305a..116a7e6e 100644 --- a/package.json +++ b/package.json @@ -27,10 +27,11 @@ "url": "https://github.com/versatica/JsSIP/issues" }, "dependencies": { - "@types/events": "^3.0.0", "@types/debug": "^4.1.7", + "@types/events": "^3.0.0", "debug": "^4.3.1", "events": "^3.3.0", + "gulp-cli": "^3.0.0", "sdp-transform": "^2.14.1" }, "devDependencies": {