UNPKG

react-native-xsip

Version:
453 lines (389 loc) 26 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <title>Call.js - Documentation</title> <script src="scripts/prettify/prettify.js"></script> <script src="scripts/prettify/lang-css.js"></script> <!--[if lt IE 9]> <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> <link type="text/css" rel="stylesheet" href="https://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css"> <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> </head> <body> <input type="checkbox" id="nav-trigger" class="nav-trigger" /> <label for="nav-trigger" class="navicon-button x"> <div class="navicon"></div> </label> <label for="nav-trigger" class="overlay"></label> <nav> <li class="nav-link nav-home-link"><a href="index.html">Home</a></li><li class="nav-heading">Classes</li><li class="nav-heading"><span class="nav-item-type type-class">C</span><span class="nav-item-name"><a href="module.exports.html">exports</a></span></li><li class="nav-heading">Events</li><li class="nav-heading"><span class="nav-item-type type-event">E</span><span class="nav-item-name"><a href="Endpoint.html#event:call_changed">call_changed</a></span></li><li class="nav-heading"><span class="nav-item-type type-event">E</span><span class="nav-item-name"><a href="Endpoint.html#event:call_received">call_received</a></span></li><li class="nav-heading"><span class="nav-item-type type-event">E</span><span class="nav-item-name"><a href="Endpoint.html#event:call_screen_locked">call_screen_locked</a></span></li><li class="nav-heading"><span class="nav-item-type type-event">E</span><span class="nav-item-name"><a href="Endpoint.html#event:call_terminated">call_terminated</a></span></li><li class="nav-heading"><span class="nav-item-type type-event">E</span><span class="nav-item-name"><a href="Endpoint.html#event:connectivity_changed">connectivity_changed</a></span></li><li class="nav-heading"><span class="nav-item-type type-event">E</span><span class="nav-item-name"><a href="Endpoint.html#event:message_received">message_received</a></span></li><li class="nav-heading"><span class="nav-item-type type-event">E</span><span class="nav-item-name"><a href="Endpoint.html#event:registration_changed">registration_changed</a></span></li><li class="nav-heading"><a href="global.html">Globals</a></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#_formatTime">_formatTime</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#_normalize">_normalize</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#_onCallChanged">_onCallChanged</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#_onCallReceived">_onCallReceived</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#_onCallScreenLocked">_onCallScreenLocked</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#_onCallTerminated">_onCallTerminated</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#_onConnectivityChanged">_onConnectivityChanged</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#_onMessageReceived">_onMessageReceived</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#_onRegistrationChanged">_onRegistrationChanged</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#answerCall">answerCall</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#changeNetworkConfiguration">changeNetworkConfiguration</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#changeServiceConfiguration">changeServiceConfiguration</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#createAccount">createAccount</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#declineCall">declineCall</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#deleteAccount">deleteAccount</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#dtmfCall">dtmfCall</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getAccountId">getAccountId</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getAudioCount">getAudioCount</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getBody">getBody</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getCallId">getCallId</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getConnectDuration">getConnectDuration</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getContactParams">getContactParams</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getContactUri">getContactUri</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getContactUriParams">getContactUriParams</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getContentType">getContentType</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getDomain">getDomain</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getFormattedConnectDuration">getFormattedConnectDuration</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getFormattedTotalDuration">getFormattedTotalDuration</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getFromName">getFromName</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getFromNumber">getFromNumber</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getFromUri">getFromUri</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getId">getId</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getLastReason">getLastReason</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getLastStatusCode">getLastStatusCode</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getLocalContact">getLocalContact</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getLocalUri">getLocalUri</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getName">getName</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getPassword">getPassword</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getProxy">getProxy</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getReason">getReason</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getRegContactParams">getRegContactParams</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getRegHeaders">getRegHeaders</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getRegistration">getRegistration</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getRegServer">getRegServer</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getRegTimeout">getRegTimeout</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getRemoteAudioCount">getRemoteAudioCount</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getRemoteContact">getRemoteContact</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getRemoteFormattedNumber">getRemoteFormattedNumber</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getRemoteName">getRemoteName</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getRemoteNumber">getRemoteNumber</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getRemoteOfferer">getRemoteOfferer</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getRemoteUri">getRemoteUri</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getRemoteVideoCount">getRemoteVideoCount</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getState">getState</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getStateText">getStateText</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getStatus">getStatus</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getStatusText">getStatusText</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getTotalDuration">getTotalDuration</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getToUri">getToUri</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getTransport">getTransport</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getURI">getURI</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getUsername">getUsername</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#getVideoCount">getVideoCount</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#hangupCall">hangupCall</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#holdCall">holdCall</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#isActive">isActive</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#makeCall">makeCall</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#muteCall">muteCall</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#redirectCall">redirectCall</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#registerAccount">registerAccount</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#start">start</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#unholdCall">unholdCall</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#unMuteCall">unMuteCall</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#useEarpiece">useEarpiece</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#useSpeaker">useSpeaker</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#xferCall">xferCall</a></span></li><li class="nav-item"><span class="nav-item-type type-function">F</span><span class="nav-item-name"><a href="global.html#xferReplacesCall">xferReplacesCall</a></span></li> </nav> <div id="main"> <h1 class="page-title">Call.js</h1> <section> <article> <pre class="prettyprint source linenums"><code>/** * This class describes the information and current status of a call. */ export default class Call { constructor({ id, callId, accountId, localContact, localUri, remoteContact, remoteUri, state, stateText, held, muted, speaker, connectDuration, totalDuration, remoteOfferer, remoteAudioCount, remoteVideoCount, audioCount, videoCount, lastStatusCode, lastReason, media, provisionalMedia }) { let remoteNumber = null; let remoteName = null; if (remoteUri) { let match = remoteUri.match(/"([^"]+)" &lt;sip:([^@]+)@/); if (match) { remoteName = match[1]; remoteNumber = match[2]; } else { match = remoteUri.match(/sip:([^@]+)@/); if (match) { remoteNumber = match[1]; } } } this._id = id; this._callId = callId; this._accountId = accountId; this._localContact = localContact; this._localUri = localUri; this._remoteContact = remoteContact; this._remoteUri = remoteUri; this._state = state; this._stateText = stateText; this._held = held; this._muted = muted; this._speaker = speaker; this._connectDuration = connectDuration; this._totalDuration = totalDuration; this._remoteOfferer = remoteOfferer; this._remoteAudioCount = remoteAudioCount; this._remoteVideoCount = remoteVideoCount; this._remoteNumber = remoteNumber; this._remoteName = remoteName; this._audioCount = audioCount; this._videoCount = videoCount; this._lastStatusCode = lastStatusCode; this._lastReason = lastReason; this._media = media; this._provisionalMedia = provisionalMedia; this._constructionTime = Math.round(new Date().getTime() / 1000); } /** * Call identification. * @returns {int} */ getId() { return this._id; } /** * The account ID where this call belongs. * @returns {int} */ getAccountId() { return this._accountId; } /** * Dialog Call-ID string. * * @returns {String} */ getCallId() { return this._callId; } /** * Up-to-date call duration in seconds. * Use local time to calculate actual call duration. * * @public * @returns {int} */ getTotalDuration() { let time = Math.round(new Date().getTime() / 1000); let offset = time - this._constructionTime; return this._totalDuration + offset; }; /** * Up-to-date call connected duration (zero when call is not established) * * @returns {int} */ getConnectDuration() { if (this._connectDuration &lt; 0 || this._state == "PJSIP_INV_STATE_DISCONNECTED") { return this._connectDuration; } let time = Math.round(new Date().getTime() / 1000); let offset = time - this._constructionTime; return this._connectDuration + offset; } /** * Call duration in "MM:SS" format. * * @public * @returns {string} */ getFormattedTotalDuration() { return this._formatTime(this.getTotalDuration()); }; /** * Call duration in "MM:SS" format. * * @public * @returns {string} */ getFormattedConnectDuration() { return this._formatTime(this.getConnectDuration()); }; /** * Local Contact. * TODO: Provide example * @returns {String} */ getLocalContact() { return this._localContact; } /** * Local URI. * TODO: Provide example * @returns {String} */ getLocalUri() { return this._localUri; } /** * Remote contact. * TODO: Provide example * @returns {String} */ getRemoteContact() { return this._remoteContact; } /** * Remote URI. * TODO: Provide example * @returns {String} */ getRemoteUri() { return this._remoteUri; } /** * Callee name. Could be null if no name specified in URI. * @returns {String} */ getRemoteName() { return this._remoteName; } /** * Callee number * @returns {String} */ getRemoteNumber() { return this._remoteNumber; } /** * @returns {String} */ getRemoteFormattedNumber() { if (this._remoteName &amp;&amp; this._remoteNumber) { return `${this._remoteName} &lt;${this._remoteNumber}>`; } else if (this._remoteNumber) { return this._remoteNumber; } else { return this._remoteUri } } /** * Invite session state. * * PJSIP_INV_STATE_NULL Before INVITE is sent or received * PJSIP_INV_STATE_CALLING After INVITE is sent * PJSIP_INV_STATE_INCOMING After INVITE is received. * PJSIP_INV_STATE_EARLY After response with To tag. * PJSIP_INV_STATE_CONNECTING After 2xx is sent/received. * PJSIP_INV_STATE_CONFIRMED After ACK is sent/received. * PJSIP_INV_STATE_DISCONNECTED Session is terminated. * * @returns {String} */ getState() { return this._state; } /** * Text describing the state. * * @returns {String} */ getStateText() { return this._stateText; } isHeld() { return this._held; } isMuted() { return this._muted; } isSpeaker() { return this._speaker; } isTerminated() { return this._state === 'PJSIP_INV_STATE_DISCONNECTED'; } /** * Flag if remote was SDP offerer * @returns {boolean} */ getRemoteOfferer() { // TODO Verify whether boolean value return this._remoteOfferer; } /** * Number of audio streams offered by remote. * @returns {int} */ getRemoteAudioCount() { return this._remoteAudioCount; } /** * Number of video streams offered by remote. * @returns {int} */ getRemoteVideoCount() { return this._remoteVideoCount; } /** * Number of simultaneous active audio streams for this call. If zero - audio is disabled in this call. * @returns {int} */ getAudioCount() { return this._audioCount; } /** * Number of simultaneous active video streams for this call. If zero - video is disabled in this call. * @returns {*} */ getVideoCount() { return this._videoCount; } /** * Last status code heard, which can be used as cause code. * Possible values: * - PJSIP_SC_TRYING / 100 * - PJSIP_SC_RINGING / 180 * - PJSIP_SC_CALL_BEING_FORWARDED / 181 * - PJSIP_SC_QUEUED / 182 * - PJSIP_SC_PROGRESS / 183 * - PJSIP_SC_OK / 200 * - PJSIP_SC_ACCEPTED / 202 * - PJSIP_SC_MULTIPLE_CHOICES / 300 * - PJSIP_SC_MOVED_PERMANENTLY / 301 * - PJSIP_SC_MOVED_TEMPORARILY / 302 * - PJSIP_SC_USE_PROXY / 305 * - PJSIP_SC_ALTERNATIVE_SERVICE / 380 * - PJSIP_SC_BAD_REQUEST / 400 * - PJSIP_SC_UNAUTHORIZED / 401 * - PJSIP_SC_PAYMENT_REQUIRED / 402 * - PJSIP_SC_FORBIDDEN / 403 * - PJSIP_SC_NOT_FOUND / 404 * - PJSIP_SC_METHOD_NOT_ALLOWED / 405 * - PJSIP_SC_NOT_ACCEPTABLE / 406 * - PJSIP_SC_PROXY_AUTHENTICATION_REQUIRED / 407 * - PJSIP_SC_REQUEST_TIMEOUT / 408 * - PJSIP_SC_GONE / 410 * - PJSIP_SC_REQUEST_ENTITY_TOO_LARGE / 413 * - PJSIP_SC_REQUEST_URI_TOO_LONG / 414 * - PJSIP_SC_UNSUPPORTED_MEDIA_TYPE / 415 * - PJSIP_SC_UNSUPPORTED_URI_SCHEME / 416 * - PJSIP_SC_BAD_EXTENSION / 420 * - PJSIP_SC_EXTENSION_REQUIRED / 421 * - PJSIP_SC_SESSION_TIMER_TOO_SMALL / 422 * - PJSIP_SC_INTERVAL_TOO_BRIEF / 423 * - PJSIP_SC_TEMPORARILY_UNAVAILABLE / 480 * - PJSIP_SC_CALL_TSX_DOES_NOT_EXIST / 481 * - PJSIP_SC_LOOP_DETECTED / 482 * - PJSIP_SC_TOO_MANY_HOPS / 483 * - PJSIP_SC_ADDRESS_INCOMPLETE / 484 * - PJSIP_AC_AMBIGUOUS / 485 * - PJSIP_SC_BUSY_HERE / 486 * - PJSIP_SC_REQUEST_TERMINATED / 487 * - PJSIP_SC_NOT_ACCEPTABLE_HERE / 488 * - PJSIP_SC_BAD_EVENT / 489 * - PJSIP_SC_REQUEST_UPDATED / 490 * - PJSIP_SC_REQUEST_PENDING / 491 * - PJSIP_SC_UNDECIPHERABLE / 493 * - PJSIP_SC_INTERNAL_SERVER_ERROR / 500 * - PJSIP_SC_NOT_IMPLEMENTED / 501 * - PJSIP_SC_BAD_GATEWAY / 502 * - PJSIP_SC_SERVICE_UNAVAILABLE / 503 * - PJSIP_SC_SERVER_TIMEOUT / 504 * - PJSIP_SC_VERSION_NOT_SUPPORTED / 505 * - PJSIP_SC_MESSAGE_TOO_LARGE / 513 * - PJSIP_SC_PRECONDITION_FAILURE / 580 * - PJSIP_SC_BUSY_EVERYWHERE / 600 * - PJSIP_SC_DECLINE / 603 * - PJSIP_SC_DOES_NOT_EXIST_ANYWHERE / 604 * - PJSIP_SC_NOT_ACCEPTABLE_ANYWHERE / 606 * - PJSIP_SC_TSX_TIMEOUT / PJSIP_SC_REQUEST_TIMEOUT * - PJSIP_SC_TSX_TRANSPORT_ERROR / PJSIP_SC_SERVICE_UNAVAILABLE * * @returns {string} */ getLastStatusCode() { return this._lastStatusCode; } /** * The reason phrase describing the last status. * * @returns {string} */ getLastReason() { return this._lastReason; } getMedia() { return this._media; } getProvisionalMedia() { return this._provisionalMedia; } /** * Format seconds to "MM:SS" format. * * @public * @returns {string} */ _formatTime(seconds) { if (isNaN(seconds) || seconds &lt; 0) { return "00:00"; } var hours = parseInt( seconds / 3600 ) % 24; var minutes = parseInt( seconds / 60 ) % 60; var result = ""; seconds = seconds % 60; if (hours > 0) { result += (hours &lt; 10 ? "0" + hours : hours) + ":"; } result += (minutes &lt; 10 ? "0" + minutes : minutes) + ":" + (seconds &lt; 10 ? "0" + seconds : seconds); return result; }; } </code></pre> </article> </section> </div> <br class="clear"> <footer> Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Thu Sep 27 2018 10:20:55 GMT+0300 (EEST) using the Minami theme. </footer> <script>prettyPrint();</script> <script src="scripts/linenumber.js"></script> </body> </html>