@@ -43561,6 +43561,7 @@ var Helpers = require('./qbWebRTCHelpers');
4356143561var RTCPeerConnection = require('./qbRTCPeerConnection');
4356243562var SignalingConstants = require('./qbWebRTCSignalingConstants');
4356343563var Utils = require('../../qbUtils');
43564+ var config = require('../../qbConfig');
4356443565
4356543566function WebRTCClient(service, connection) {
4356643567 if (WebRTCClient.__instance) {
@@ -43693,24 +43694,37 @@ WebRTCClient.prototype.clearSession = function(sessionId) {
4369343694 * @returns {boolean} if active or new session exist
4369443695 */
4369543696WebRTCClient.prototype.isExistNewOrActiveSessionExceptSessionID = function(sessionID) {
43696- var self = this;
4369743697 var exist = false;
43698+ var sessions = this.sessions;
4369843699
43699- if (Object.keys(self.sessions).length > 0) {
43700- Object.keys(self.sessions).forEach(function(key, i, arr) {
43701- var session = self.sessions[key];
43702- if (session.state === WebRTCSession.State.NEW || session.state === WebRTCSession.State.ACTIVE) {
43703- if (session.ID !== sessionID) {
43704- exist = true;
43705- // break; // break doesn't work in 'forEach', need to find another way
43706- }
43707- }
43700+ if (Object.keys(sessions).length > 0) {
43701+ exist = Object.keys(sessions).some(function (key) {
43702+ var session = sessions[key];
43703+ var sessionActive = (
43704+ session.state === WebRTCSession.State.NEW ||
43705+ session.state === WebRTCSession.State.ACTIVE
43706+ );
43707+ return sessionActive && session.ID !== sessionID;
4370843708 });
4370943709 }
4371043710
4371143711 return exist;
4371243712};
4371343713
43714+ WebRTCClient.prototype.getNewSessionsCount = function (exceptId) {
43715+ var sessions = this.sessions;
43716+ return Object.keys(sessions).reduce(function (count, sessionId) {
43717+ var session = sessions[sessionId];
43718+ if (session.ID === exceptId) {
43719+ return count;
43720+ }
43721+ var sessionActive = (
43722+ session.state === WebRTCSession.State.NEW
43723+ );
43724+ return sessionActive ? count + 1 : count;
43725+ }, 0);
43726+ };
43727+
4371443728/**
4371543729 * DELEGATE (signaling)
4371643730 */
@@ -43719,7 +43733,18 @@ WebRTCClient.prototype._onCallListener = function(userID, sessionID, extension)
4371943733
4372043734 Helpers.trace("onCall. UserID:" + userID + ". SessionID: " + sessionID);
4372143735
43722- if (this.isExistNewOrActiveSessionExceptSessionID(sessionID)) {
43736+ var otherActiveSessions = this.isExistNewOrActiveSessionExceptSessionID(sessionID);
43737+ var newSessionsCount = this.getNewSessionsCount(sessionID);
43738+ if (otherActiveSessions && !this.sessions[sessionID]) {
43739+ newSessionsCount++;
43740+ }
43741+
43742+ var reject = (
43743+ otherActiveSessions &&
43744+ (config.webrtc.autoReject || newSessionsCount > config.webrtc.incomingLimit)
43745+ );
43746+
43747+ if (reject) {
4372343748 Helpers.trace('User with id ' + userID + ' is busy at the moment.');
4372443749
4372543750 delete extension.sdp;
@@ -43735,12 +43760,18 @@ WebRTCClient.prototype._onCallListener = function(userID, sessionID, extension)
4373543760 var session = this.sessions[sessionID],
4373643761 bandwidth = +userInfo.bandwidth || 0;
4373743762
43738- if (!session) {
43739- session = this._createAndStoreSession(sessionID, extension.callerID, extension.opponentsIDs, extension.callType, bandwidth);
43740-
43741- if (typeof this.onCallListener === 'function') {
43742- Utils.safeCallbackCall(this.onCallListener, session, userInfo);
43743- }
43763+ if (!session) {
43764+ session = this._createAndStoreSession(
43765+ sessionID,
43766+ extension.callerID,
43767+ extension.opponentsIDs,
43768+ extension.callType,
43769+ bandwidth
43770+ );
43771+ }
43772+
43773+ if (typeof this.onCallListener === 'function') {
43774+ Utils.safeCallbackCall(this.onCallListener, session, userInfo);
4374443775 }
4374543776
4374643777 session.processOnCall(userID, extension);
@@ -43883,7 +43914,7 @@ function getOpponentsIdNASessions(sessions) {
4388343914 return opponents;
4388443915}
4388543916
43886- },{"../../qbUtils":209,"./qbRTCPeerConnection":197,"./qbWebRTCHelpers":199,"./qbWebRTCSession":200,"./qbWebRTCSignalingConstants":201,"./qbWebRTCSignalingProcessor":202,"./qbWebRTCSignalingProvider":203}],199:[function(require,module,exports){
43917+ },{"../../qbConfig":205,"../../ qbUtils":209,"./qbRTCPeerConnection":197,"./qbWebRTCHelpers":199,"./qbWebRTCSession":200,"./qbWebRTCSignalingConstants":201,"./qbWebRTCSignalingProcessor":202,"./qbWebRTCSignalingProvider":203}],199:[function(require,module,exports){
4388743918'use strict';
4388843919
4388943920/**
@@ -45589,6 +45620,8 @@ var config = {
4558945620 chatReconnectionTimeInterval: 5,
4559045621 webrtc: {
4559145622 answerTimeInterval: 60,
45623+ autoReject: true,
45624+ incomingLimit: 1,
4559245625 dialingTimeInterval: 5,
4559345626 disconnectTimeInterval: 30,
4559445627 statsReportTimeInterval: false,
0 commit comments