You've already forked matrix-js-sdk
mirror of
https://github.com/matrix-org/matrix-js-sdk.git
synced 2025-11-23 17:02:25 +03:00
Fix temporary call messages being handled without call
In cases where a rogue client, or just a simple bug, sends a temporary call message, like CallNegotiate the messages should just be discarded if there's no actual p2p connection created.
This commit is contained in:
@@ -1286,7 +1286,7 @@ export class MatrixCall extends EventEmitter {
|
|||||||
// https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Perfect_negotiation
|
// https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Perfect_negotiation
|
||||||
const offerCollision = (
|
const offerCollision = (
|
||||||
(description.type === 'offer') &&
|
(description.type === 'offer') &&
|
||||||
(this.makingOffer || this.peerConn.signalingState != 'stable')
|
(this.makingOffer || this.peerConn.signalingState !== 'stable')
|
||||||
);
|
);
|
||||||
|
|
||||||
this.ignoreOffer = !polite && offerCollision;
|
this.ignoreOffer = !polite && offerCollision;
|
||||||
@@ -1935,6 +1935,10 @@ export class MatrixCall extends EventEmitter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get hasPeerConnection() {
|
||||||
|
return Boolean(this.peerConn);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getScreensharingStream(
|
async function getScreensharingStream(
|
||||||
|
|||||||
@@ -220,6 +220,7 @@ export class CallEventHandler {
|
|||||||
} else {
|
} else {
|
||||||
this.client.emit("Call.incoming", call);
|
this.client.emit("Call.incoming", call);
|
||||||
}
|
}
|
||||||
|
return;
|
||||||
} else if (type === EventType.CallCandidates) {
|
} else if (type === EventType.CallCandidates) {
|
||||||
if (weSentTheEvent) return;
|
if (weSentTheEvent) return;
|
||||||
|
|
||||||
@@ -232,6 +233,7 @@ export class CallEventHandler {
|
|||||||
} else {
|
} else {
|
||||||
call.onRemoteIceCandidatesReceived(event);
|
call.onRemoteIceCandidatesReceived(event);
|
||||||
}
|
}
|
||||||
|
return;
|
||||||
} else if ([EventType.CallHangup, EventType.CallReject].includes(type)) {
|
} else if ([EventType.CallHangup, EventType.CallReject].includes(type)) {
|
||||||
// Note that we also observe our own hangups here so we can see
|
// Note that we also observe our own hangups here so we can see
|
||||||
// if we've already rejected a call that would otherwise be valid
|
// if we've already rejected a call that would otherwise be valid
|
||||||
@@ -255,10 +257,14 @@ export class CallEventHandler {
|
|||||||
this.calls.delete(content.call_id);
|
this.calls.delete(content.call_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// The following events need a call
|
// The following events need a call and a peer connection
|
||||||
if (!call) return;
|
if (!call && !call.hasPeerConnection) {
|
||||||
|
logger.warn('Discarding an event', type);
|
||||||
|
return;
|
||||||
|
}
|
||||||
// Ignore remote echo
|
// Ignore remote echo
|
||||||
if (event.getContent().party_id === call.ourPartyId) return;
|
if (event.getContent().party_id === call.ourPartyId) return;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user