Home Reference Source

src/calls/CallEndReason.js

import {Enum} from '../utils';
import Logs from '../Logs';

const log = Logs.instance.getLogger('SippoJS/CallEndReason');

/**
 * Enum containing the possible end reasons of a call. Possible values:
 * - UNSPECIFIED
 * - NORMAL_CLEARING
 * - BROWSER_CLOSED
 * - BAD_REQUEST
 * - ORIGINATOR_CANCEL
 * - NOT_FOUND
 * - USER_BUSY
 * - NO_ANSWER
 * - MEDIA_ACCESS_ERROR
 * - SERVER_ERROR
 * @type {Enum}
 */
export const CallEndReason = new Enum([
	'UNSPECIFIED',
	'NORMAL_CLEARING',
	'BROWSER_CLOSED',
	'BAD_REQUEST',
	'ORIGINATOR_CANCEL',
	'NOT_FOUND',
	'USER_BUSY',
	'NO_ANSWER',
	'MEDIA_ACCESS_ERROR',
	'SERVER_ERROR',
]);

/** @protected */
export function getEndReasonFromWacValue(wacEndReason) {
	switch (wacEndReason) {
		case 'notfound':
		case 'unavailable':
			return CallEndReason.NOT_FOUND;
		case 'unknown':
			return CallEndReason.UNSPECIFIED;
		case 'normal':
			return CallEndReason.NORMAL_CLEARING;
		case 'closebrowser':
			return CallEndReason.BROWSER_CLOSED;
		case 'rejected':
			return CallEndReason.USER_BUSY;
		case 'timeout':
		case 'noattended':
			return CallEndReason.NO_ANSWER;
		case 'webrtcunsupported':
		case 'webrtcerror':
		case 'deniedmediaaccess':
			return CallEndReason.MEDIA_ACCESS_ERROR;
		case 'missed':
		case 'leavesqueue':
			return CallEndReason.ORIGINATOR_CANCEL;
		case 'badrequest':
		case 'notallowed':
			return CallEndReason.BAD_REQUEST;
		case 'cleanup':
		case 'networkerror':
		case 'servererror':
		default:
			log.warn(`Unexpected end reason received from wac: ${wacEndReason}`);
			return CallEndReason.SERVER_ERROR;
	}
}