/*TigerTMS iPortal v1*/ "use strict"; let userTestList = document.getElementById("testCallList"); class SwitchFactory { createClient(type, probs) { switch (type) { case "nec": return new NECObject(probs); case "mitel": return new MitelObject(probs); case "telepo": return new TelepoObject(probs); } } } class NECObject { constructor(probs) { this.wss = probs.wss; this.uri = probs.uri; this.realm = probs.realm; this.user = probs.user; this.password = probs.password; //append API library let jssip = document.createElement("script"); jssip.type = "text/javascript"; jssip.src = "./js/webrtc/jssip.js"; document.body.append(jssip); } init() { // console.log("nec PBX initialization"); let socket = new JsSIP.WebSocketInterface(this.wss); let configuration = { sockets: [socket], // uri: this.uri, // password: this.password, uri: userToCall.user, password: userToCall.password, realm: this.realm, register: false, session_timers: true, session_timers_refresh_method: "invite", }; this.coolPhone = new JsSIP.UA(configuration); //append the audio tag to DOM let audioLocal = document.createElement("audio"); audioLocal.setAttribute("id", "audio-local"); audioLocal.autoplay = "autoplay"; document.body.append(audioLocal); } call(ext) { startRingback(); // console.log("call: " + ext); let session; // Register callbacks to desired call events var eventHandlers = { progress: function (e) { // console.log("call is in progress"); }, failed: function (e) { stopRingback(); // console.log("call failed with cause: " + e.cause); if (e.cause === "Busy") { showCallStatus(langdata.languages[themeLang].strings["busy"]); } else if (e.cause === "Unavailable") { showCallStatus(langdata.languages[themeLang].strings["unavailable"]); } else { showCallStatus(langdata.languages[themeLang].strings["cancelled"]); } }, ended: function (e) { stopRingback(); // console.log("call ended with cause: " + e); }, confirmed: function (e) { stopRingback(); // console.log("call confirmed"); let streamm = session.connection.getRemoteStreams()[0]; // console.log(streamm); if (streamm) { document.getElementById("audio-local").srcObject = streamm; // console.log(document.getElementById("audio-local")); document.getElementById("audio-local").play(); } // console.log(e); }, addstream: function (e) { var stream = e.stream; // console.log(stream); document.getElementById("local-audio").srcObject = stream; }, }; var options = { eventHandlers: eventHandlers, mediaConstraints: { audio: true, video: false }, }; this.coolPhone.start(); this.coolPhone.register(); setTimeout(() => { session = this.coolPhone.call(ext, options); }, 1000); } hangup() { // console.log("hangup"); this.coolPhone.terminateSessions(); this.coolPhone.unregister(); } } class MitelObject { constructor(probs) { this.type = "SUBSCRIBER"; this.remote_video_id = "remoteView"; this.self_video_id = "selfView"; this.disable_video = true; this.ws_secured = true; // this.login_user = probs.login_user; // this.login_password = probs.login_password; this.pbxIp = probs.pbx_ip; this.wss = probs.wss; this.wss_port = probs.wss_port; // this.setside_username = probs.login_user; this.api_url = probs.api_url; // this.login_user = userToCall.user; // this.login_password = userToCall.password; // this.setside_username = userToCall.user; //append API library let sipJSmin = document.createElement("script"); sipJSmin.type = "text/javascript"; sipJSmin.src = "./js/webrtc/sip.min.js"; let miWeb = document.createElement("script"); miWeb.type = "text/javascript"; miWeb.src = "./js/webrtc/miwebphone.js"; document.body.append(sipJSmin); document.body.append(miWeb); } sendHttpRequest(method, url, data) { const promise = new Promise((resolve, reject) => { const xhr = new XMLHttpRequest(); xhr.open(method, url); // console.log(btoa(this.login_user + ":" + this.login_password)); xhr.responseType = "json"; xhr.setRequestHeader("Content-Type", "application/json"); xhr.setRequestHeader( "Authorization", "Basic " + btoa(userToCall.user + ":" + userToCall.password) ); xhr.onload = () => { resolve(xhr.response); }; xhr.send(data); }); return promise; } init() { // console.log("Mitel MBG PBX initialization"); this.sendHttpRequest("GET", this.api_url + "/IcpSideInfo") .then((resp) => { this.icp_password = resp.icp_password; this.user_config = { type: this.type, password: this.icp_password, login: userToCall.user, remote_video_id: this.remote_video_id, self_video_id: this.self_video_id, pbxIpaddress: this.pbx_ip, ws_server: this.wss, ws_port: this.wss_port, setside_username: userToCall.user, disable_video: this.disable_video, ws_secured: this.ws_secured, callBackCallTerminated: "mitelCallTerminated", callBackServerDisconnected: "EventDisconnected", callBackCallError: "EventCallError", }; //append the audio tags to DOM let contenDiv = document.body; let selfView = document.createElement("audio"); selfView.setAttribute("id", "selfView"); selfView.autoplay = "autoplay"; selfView.hidden = "false"; let remoteView = document.createElement("audio"); remoteView.setAttribute("id", "remoteView"); remoteView.autoplay = "autoplay"; remoteView.hidden = "false"; contenDiv.append(selfView); contenDiv.append(remoteView); }) .catch((e) => { this.initOk = false; EventCallError("LOGINFAILED"); }); } call(ext) { // console.log("call " + ext); this.user_WebPhone = new MiWebPhone(this.user_config); setTimeout(() => { this.user_WebPhone.Call(ext); }, 2000); } hangup() { this.user_WebPhone.HangUp(); this.user_WebPhone.Logout(); } } class TelepoObject { constructor(probs) { this.wss = probs.wss; this.realm = probs.realm; // this.uri = probs.users[userToCall].user; // this.password = probs.users[userToCall].password; //append API library let jssip = document.createElement("script"); jssip.type = "text/javascript"; jssip.src = "./js/webrtc/jssip.js"; document.body.append(jssip); } init() { // console.log("Telepo PBX initialization"); // JsSIP.debug.enable("JsSIP:*"); let socket = new JsSIP.WebSocketInterface(this.wss); let configuration = { sockets: [socket], uri: userToCall.user, password: userToCall.password, // uri: this.uri, // password: this.password, realm: this.realm, register: false, session_timers: true, session_timers_refresh_method: "invite", }; this.coolPhone = new JsSIP.UA(configuration); //append the audio tag to DOM let audioLocal = document.createElement("audio"); audioLocal.setAttribute("id", "audio-local"); audioLocal.autoplay = "autoplay"; document.body.append(audioLocal); } call(ext) { startRingback(); // console.log("call: " + ext); let session; // Register callbacks to desired call events var eventHandlers = { progress: function (e) { // console.log("call is in progress"); }, failed: function (e) { stopRingback(); // console.log("call failed with cause: " + e.cause); if (e.cause === "Busy") { showCallStatus(langdata.languages[themeLang].strings["busy"]); } else if (e.cause === "Unavailable") { showCallStatus(langdata.languages[themeLang].strings["unavailable"]); } else { showCallStatus(langdata.languages[themeLang].strings["cancelled"]); } }, ended: function (e) { stopRingback(); // console.log("call ended with cause: " + e); }, confirmed: function (e) { stopRingback(); // console.log("call confirmed"); let streamm = session.connection.getRemoteStreams()[0]; // console.log(streamm); if (streamm) { document.getElementById("audio-local").srcObject = streamm; // console.log(document.getElementById("audio-local")); document.getElementById("audio-local").play(); } // console.log(e); }, addstream: function (e) { var stream = e.stream; // console.log(stream); document.getElementById("local-audio").srcObject = stream; }, }; var options = { eventHandlers: eventHandlers, mediaConstraints: { audio: true, video: false }, }; this.coolPhone.start(); this.coolPhone.register(); setTimeout(() => { session = this.coolPhone.call(ext, options); }, 1000); } hangup() { // console.log("hangup"); this.coolPhone.terminateSessions(); this.coolPhone.unregister(); } } function mitelCallTerminated() { showCallStatus(langdata.languages[themeLang].strings["unavailable"]); } function EventDisconnected() { showCallStatus(langdata.languages[themeLang].strings["busy"]); } function EventCallError() { showCallStatus(langdata.languages[themeLang].strings["cancelled"]); } function startRingback() { document.getElementById("ringbacktone").play(); } function stopRingback() { document.getElementById("ringbacktone").pause(); }