From 4696622b0a10fff517f88a5f47b0806705196d39 Mon Sep 17 00:00:00 2001 From: David Baker Date: Mon, 22 Sep 2014 11:44:15 +0100 Subject: [PATCH] Propagate failure reason to the other party. --- webclient/components/matrix/matrix-call.js | 13 +++++++------ webclient/components/matrix/matrix-phone-service.js | 2 +- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/webclient/components/matrix/matrix-call.js b/webclient/components/matrix/matrix-call.js index d8571e703..9d3a78729 100644 --- a/webclient/components/matrix/matrix-call.js +++ b/webclient/components/matrix/matrix-call.js @@ -197,7 +197,7 @@ angular.module('MatrixCall', []) } }; - MatrixCall.prototype.hangup = function(suppressEvent) { + MatrixCall.prototype.hangup = function(reason, suppressEvent) { console.log("Ending call "+this.call_id); // pausing now keeps the last frame (ish) of the video call in the video element @@ -209,10 +209,12 @@ angular.module('MatrixCall', []) if (this.peerConn) this.peerConn.close(); this.hangupParty = 'local'; + this.hangupReason = reason; var content = { version: 0, call_id: this.call_id, + reason: reason }; this.sendEventWithRetry('m.call.hangup', content); this.state = 'ended'; @@ -324,8 +326,7 @@ angular.module('MatrixCall', []) var self = this; $timeout(function() { if (self.state == 'invite_sent') { - self.hangupReason = 'invite_timeout'; - self.hangup(); + self.hangup('invite_timeout'); } }, MatrixCall.CALL_TIMEOUT); @@ -369,8 +370,7 @@ angular.module('MatrixCall', []) self.didConnect = true; }); } else if (this.peerConn.iceConnectionState == 'failed') { - this.hangupReason = 'ice_failed'; - this.hangup(); + this.hangup('ice_failed'); } }; @@ -448,12 +448,13 @@ angular.module('MatrixCall', []) }); }; - MatrixCall.prototype.onHangupReceived = function() { + MatrixCall.prototype.onHangupReceived = function(msg) { console.log("Hangup received"); if (this.remoteVideoElement) this.remoteVideoElement.pause(); if (this.localVideoElement) this.localVideoElement.pause(); this.state = 'ended'; this.hangupParty = 'remote'; + this.hangupReason = msg.reason; this.stopAllMedia(); if (this.peerConn && this.peerConn.signalingState != 'closed') this.peerConn.close(); if (this.onHangup) this.onHangup(this); diff --git a/webclient/components/matrix/matrix-phone-service.js b/webclient/components/matrix/matrix-phone-service.js index 9d0b84fb2..06465ed82 100644 --- a/webclient/components/matrix/matrix-phone-service.js +++ b/webclient/components/matrix/matrix-phone-service.js @@ -145,7 +145,7 @@ angular.module('matrixPhoneService', []) call.initWithHangup(event); matrixPhoneService.allCalls[msg.call_id] = call; } else { - call.onHangupReceived(); + call.onHangupReceived(msg); delete(matrixPhoneService.allCalls[msg.call_id]); } }