Skip to content

Commit

Permalink
Merge pull request #189 from saghul/dtmf
Browse files Browse the repository at this point in the history
Implement RTCPeerConnection.createDTMFSender
  • Loading branch information
ibc committed Jul 12, 2016
2 parents edf1a5d + d379705 commit feced25
Show file tree
Hide file tree
Showing 16 changed files with 997 additions and 87 deletions.
248 changes: 196 additions & 52 deletions dist/cordova-plugin-iosrtc.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* cordova-plugin-iosrtc v3.0.1
* cordova-plugin-iosrtc v3.0.2-pre
* Cordova iOS plugin exposing the full WebRTC W3C JavaScript APIs
* Copyright 2015-2016 Iñaki Baz Castillo at eFace2Face, inc. (https://eface2face.com)
* License MIT
Expand Down Expand Up @@ -461,7 +461,7 @@ function onEvent(data) {
}
}

},{"./MediaStreamTrack":5,"cordova/exec":undefined,"debug":15,"yaeti":20}],4:[function(require,module,exports){
},{"./MediaStreamTrack":5,"cordova/exec":undefined,"debug":16,"yaeti":21}],4:[function(require,module,exports){
/**
* Expose the MediaStreamRenderer class.
*/
Expand Down Expand Up @@ -813,7 +813,7 @@ function getElementPositionAndSize() {
};
}

},{"./MediaStream":3,"cordova/exec":undefined,"debug":15,"random-number":19,"yaeti":20}],5:[function(require,module,exports){
},{"./MediaStream":3,"cordova/exec":undefined,"debug":16,"random-number":20,"yaeti":21}],5:[function(require,module,exports){
/**
* Expose the MediaStreamTrack class.
*/
Expand Down Expand Up @@ -933,7 +933,139 @@ function onEvent(data) {
}
}

},{"./enumerateDevices":10,"cordova/exec":undefined,"debug":15,"yaeti":20}],6:[function(require,module,exports){
},{"./enumerateDevices":11,"cordova/exec":undefined,"debug":16,"yaeti":21}],6:[function(require,module,exports){
/**
* Expose the RTCDTMFSender class.
*/
module.exports = RTCDTMFSender;


/**
* Dependencies.
*/
var
debug = require('debug')('iosrtc:RTCDTMFSender'),
debugerror = require('debug')('iosrtc:ERROR:RTCDTMFSender'),
exec = require('cordova/exec'),
randomNumber = require('random-number').generator({min: 10000, max: 99999, integer: true}),
EventTarget = require('yaeti').EventTarget;


debugerror.log = console.warn.bind(console);


function RTCDTMFSender(peerConnection, track) {
var self = this;

// Make this an EventTarget.
EventTarget.call(this);

debug('new() | [track:%o]', track);

// Public atributes (accessed as read-only properties)
this._track = track;
// TODO: read these from the properties exposed in Swift?
this._duration = 100;
this._interToneGap = 70;
this._toneBuffer = '';

// Private attributes.
this.peerConnection = peerConnection;
this.dsId = randomNumber();

function onResultOK(data) {
onEvent.call(self, data);
}

exec(onResultOK, null, 'iosrtcPlugin', 'RTCPeerConnection_createDTMFSender', [this.peerConnection.pcId, this.dsId, this._track.id]);

}


Object.defineProperty(RTCDTMFSender.prototype, 'canInsertDTMF', {
get: function () {
// TODO: check if it's muted or stopped?
return this._track && this._track.kind === 'audio' && this._track.enabled;
}
});


Object.defineProperty(RTCDTMFSender.prototype, 'track', {
get: function () {
return this._track;
}
});


Object.defineProperty(RTCDTMFSender.prototype, 'duration', {
get: function () {
return this._duration;
}
});


Object.defineProperty(RTCDTMFSender.prototype, 'interToneGap', {
get: function () {
return this._interToneGap;
}
});


Object.defineProperty(RTCDTMFSender.prototype, 'toneBuffer', {
get: function () {
return this._toneBuffer;
}
});


RTCDTMFSender.prototype.insertDTMF = function (tones, duration, interToneGap) {
if (isClosed.call(this)) {
return;
}

debug('insertDTMF() | [tones:%o, duration:%o, interToneGap:%o]', tones, duration, interToneGap);

if (!tones) {
return;
}

this._duration = duration || 100;
this._interToneGap = interToneGap || 70;

var self = this;

function onResultOK(data) {
onEvent.call(self, data);
}

exec(onResultOK, null, 'iosrtcPlugin', 'RTCPeerConnection_RTCDTMFSender_insertDTMF', [this.peerConnection.pcId, this.dsId, tones, this._duration, this._interToneGap]);
};


/**
* Private API.
*/


function isClosed() {
return this.peerConnection.signalingState === 'closed';
}


function onEvent(data) {
var type = data.type,
event;

debug('onEvent() | [type:%s, data:%o]', type, data);

if (type === 'tonechange') {
event = new Event('tonechange');
event.tone = data.tone;
this.dispatchEvent(event);
}
}

},{"cordova/exec":undefined,"debug":16,"random-number":20,"yaeti":21}],7:[function(require,module,exports){
/**
* Expose the RTCDataChannel class.
*/
Expand Down Expand Up @@ -1157,7 +1289,7 @@ function onEvent(data) {
}
}

},{"cordova/exec":undefined,"debug":15,"random-number":19,"yaeti":20}],7:[function(require,module,exports){
},{"cordova/exec":undefined,"debug":16,"random-number":20,"yaeti":21}],8:[function(require,module,exports){
/**
* Expose the RTCIceCandidate class.
*/
Expand All @@ -1173,7 +1305,7 @@ function RTCIceCandidate(data) {
this.candidate = data.candidate;
}

},{}],8:[function(require,module,exports){
},{}],9:[function(require,module,exports){
(function (global){
/**
* Expose the RTCPeerConnection class.
Expand All @@ -1193,6 +1325,7 @@ var
RTCSessionDescription = require('./RTCSessionDescription'),
RTCIceCandidate = require('./RTCIceCandidate'),
RTCDataChannel = require('./RTCDataChannel'),
RTCDTMFSender = require('./RTCDTMFSender'),
MediaStream = require('./MediaStream'),
Errors = require('./Errors');

Expand Down Expand Up @@ -1762,6 +1895,17 @@ RTCPeerConnection.prototype.createDataChannel = function (label, options) {
};


RTCPeerConnection.prototype.createDTMFSender = function (track) {
if (isClosed.call(this)) {
throw new Errors.InvalidStateError('peerconnection is closed');
}

debug('createDTMFSender() [track:%o]', track);

return new RTCDTMFSender(this, track);
};


RTCPeerConnection.prototype.close = function () {
if (isClosed.call(this)) {
return;
Expand Down Expand Up @@ -1895,7 +2039,7 @@ function onEvent(data) {
}

}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
},{"./Errors":1,"./MediaStream":3,"./RTCDataChannel":6,"./RTCIceCandidate":7,"./RTCSessionDescription":9,"cordova/exec":undefined,"debug":15,"random-number":19,"yaeti":20}],9:[function(require,module,exports){
},{"./Errors":1,"./MediaStream":3,"./RTCDTMFSender":6,"./RTCDataChannel":7,"./RTCIceCandidate":8,"./RTCSessionDescription":10,"cordova/exec":undefined,"debug":16,"random-number":20,"yaeti":21}],10:[function(require,module,exports){
/**
* Expose the RTCSessionDescription class.
*/
Expand All @@ -1910,7 +2054,7 @@ function RTCSessionDescription(data) {
this.sdp = data.sdp;
}

},{}],10:[function(require,module,exports){
},{}],11:[function(require,module,exports){
/**
* Expose the enumerateDevices function.
*/
Expand Down Expand Up @@ -1979,7 +2123,7 @@ function getMediaDeviceInfos(devices) {
return mediaDeviceInfos;
}

},{"./MediaDeviceInfo":2,"cordova/exec":undefined,"debug":15}],11:[function(require,module,exports){
},{"./MediaDeviceInfo":2,"cordova/exec":undefined,"debug":16}],12:[function(require,module,exports){
/**
* Expose the getUserMedia function.
*/
Expand Down Expand Up @@ -2150,7 +2294,7 @@ function getUserMedia(constraints) {
exec(onResultOK, onResultError, 'iosrtcPlugin', 'getUserMedia', [newConstraints]);
}

},{"./Errors":1,"./MediaStream":3,"cordova/exec":undefined,"debug":15}],12:[function(require,module,exports){
},{"./Errors":1,"./MediaStream":3,"cordova/exec":undefined,"debug":16}],13:[function(require,module,exports){
(function (global){
/**
* Variables.
Expand Down Expand Up @@ -2287,7 +2431,7 @@ function dump() {
}

}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
},{"./MediaStream":3,"./MediaStreamTrack":5,"./RTCIceCandidate":7,"./RTCPeerConnection":8,"./RTCSessionDescription":9,"./enumerateDevices":10,"./getUserMedia":11,"./rtcninjaPlugin":13,"./videoElementsHandler":14,"cordova/exec":undefined,"debug":15,"domready":18}],13:[function(require,module,exports){
},{"./MediaStream":3,"./MediaStreamTrack":5,"./RTCIceCandidate":8,"./RTCPeerConnection":9,"./RTCSessionDescription":10,"./enumerateDevices":11,"./getUserMedia":12,"./rtcninjaPlugin":14,"./videoElementsHandler":15,"cordova/exec":undefined,"debug":16,"domready":18}],14:[function(require,module,exports){
/**
* Expose the rtcninjaPlugin object.
*/
Expand Down Expand Up @@ -2319,7 +2463,7 @@ function attachMediaStream(element, stream) {
return element;
}

},{"./MediaStreamTrack":5,"./RTCIceCandidate":7,"./RTCPeerConnection":8,"./RTCSessionDescription":9,"./enumerateDevices":10,"./getUserMedia":11}],14:[function(require,module,exports){
},{"./MediaStreamTrack":5,"./RTCIceCandidate":8,"./RTCPeerConnection":9,"./RTCSessionDescription":10,"./enumerateDevices":11,"./getUserMedia":12}],15:[function(require,module,exports){
(function (global){
/**
* Expose a function that must be called when the library is loaded.
Expand Down Expand Up @@ -2657,7 +2801,7 @@ function releaseMediaStreamRenderer(video) {
}

}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
},{"./MediaStreamRenderer":4,"debug":15}],15:[function(require,module,exports){
},{"./MediaStreamRenderer":4,"debug":16}],16:[function(require,module,exports){

/**
* This is the web browser implementation of `debug()`.
Expand Down Expand Up @@ -2827,7 +2971,7 @@ function localstorage(){
} catch (e) {}
}

},{"./debug":16}],16:[function(require,module,exports){
},{"./debug":17}],17:[function(require,module,exports){

/**
* This is the common logic for both the Node.js and web browser
Expand Down Expand Up @@ -3026,7 +3170,39 @@ function coerce(val) {
return val;
}

},{"ms":17}],17:[function(require,module,exports){
},{"ms":19}],18:[function(require,module,exports){
/*!
* domready (c) Dustin Diaz 2014 - License MIT
*/
!function (name, definition) {

if (typeof module != 'undefined') module.exports = definition()
else if (typeof define == 'function' && typeof define.amd == 'object') define(definition)
else this[name] = definition()

}('domready', function () {

var fns = [], listener
, doc = document
, hack = doc.documentElement.doScroll
, domContentLoaded = 'DOMContentLoaded'
, loaded = (hack ? /^loaded|^c/ : /^loaded|^i|^c/).test(doc.readyState)


if (!loaded)
doc.addEventListener(domContentLoaded, listener = function () {
doc.removeEventListener(domContentLoaded, listener)
loaded = 1
while (listener = fns.shift()) listener()
})

return function (fn) {
loaded ? setTimeout(fn, 0) : fns.push(fn)
}

});

},{}],19:[function(require,module,exports){
/**
* Helpers.
*/
Expand Down Expand Up @@ -3153,39 +3329,7 @@ function plural(ms, n, name) {
return Math.ceil(ms / n) + ' ' + name + 's';
}

},{}],18:[function(require,module,exports){
/*!
* domready (c) Dustin Diaz 2014 - License MIT
*/
!function (name, definition) {

if (typeof module != 'undefined') module.exports = definition()
else if (typeof define == 'function' && typeof define.amd == 'object') define(definition)
else this[name] = definition()

}('domready', function () {

var fns = [], listener
, doc = document
, hack = doc.documentElement.doScroll
, domContentLoaded = 'DOMContentLoaded'
, loaded = (hack ? /^loaded|^c/ : /^loaded|^i|^c/).test(doc.readyState)


if (!loaded)
doc.addEventListener(domContentLoaded, listener = function () {
doc.removeEventListener(domContentLoaded, listener)
loaded = 1
while (listener = fns.shift()) listener()
})

return function (fn) {
loaded ? setTimeout(fn, 0) : fns.push(fn)
}

});

},{}],19:[function(require,module,exports){
},{}],20:[function(require,module,exports){
void function(root){

function defaults(options){
Expand Down Expand Up @@ -3231,13 +3375,13 @@ void function(root){
module.exports.defaults = defaults
}(this)

},{}],20:[function(require,module,exports){
},{}],21:[function(require,module,exports){
module.exports = {
EventTarget : require('./lib/EventTarget'),
Event : require('./lib/Event')
};

},{"./lib/Event":21,"./lib/EventTarget":22}],21:[function(require,module,exports){
},{"./lib/Event":22,"./lib/EventTarget":23}],22:[function(require,module,exports){
(function (global){
/**
* In browsers export the native Event interface.
Expand All @@ -3246,7 +3390,7 @@ module.exports = {
module.exports = global.Event;

}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
},{}],22:[function(require,module,exports){
},{}],23:[function(require,module,exports){
/**
* Expose the _EventTarget class.
*/
Expand Down Expand Up @@ -3367,5 +3511,5 @@ function _dispatchEvent(event) {
return !event.defaultPrevented;
}

},{}]},{},[12])(12)
},{}]},{},[13])(13)
});
Loading

0 comments on commit feced25

Please sign in to comment.