Fix call setup state management bugs.

This commit is contained in:
Cody Henthorne
2021-11-10 10:38:15 -05:00
parent c0a468e42b
commit 8a05626791
19 changed files with 144 additions and 103 deletions

View File

@@ -551,11 +551,11 @@ public final class MessageContentProcessor {
MessageDatabase database = DatabaseFactory.getSmsDatabase(context);
database.markAsMissedCall(smsMessageId.get(), message.getType() == OfferMessage.Type.VIDEO_CALL);
} else {
RemotePeer remotePeer = new RemotePeer(senderRecipient.getId());
RemotePeer remotePeer = new RemotePeer(senderRecipient.getId(), new CallId(message.getId()));
byte[] remoteIdentityKey = ApplicationDependencies.getIdentityStore().getIdentityRecord(senderRecipient.getId()).transform(record -> record.getIdentityKey().serialize()).orNull();
ApplicationDependencies.getSignalCallManager()
.receivedOffer(new WebRtcData.CallMetadata(remotePeer, new CallId(message.getId()), content.getSenderDevice()),
.receivedOffer(new WebRtcData.CallMetadata(remotePeer, content.getSenderDevice()),
new WebRtcData.OfferMetadata(message.getOpaque(), message.getSdp(), message.getType()),
new WebRtcData.ReceivedOfferMetadata(remoteIdentityKey,
content.getServerReceivedTimestamp(),
@@ -569,11 +569,11 @@ public final class MessageContentProcessor {
@NonNull Recipient senderRecipient)
{
log(String.valueOf(content), "handleCallAnswerMessage...");
RemotePeer remotePeer = new RemotePeer(senderRecipient.getId());
RemotePeer remotePeer = new RemotePeer(senderRecipient.getId(), new CallId(message.getId()));
byte[] remoteIdentityKey = ApplicationDependencies.getIdentityStore().getIdentityRecord(senderRecipient.getId()).transform(record -> record.getIdentityKey().serialize()).orNull();
ApplicationDependencies.getSignalCallManager()
.receivedAnswer(new WebRtcData.CallMetadata(remotePeer, new CallId(message.getId()), content.getSenderDevice()),
.receivedAnswer(new WebRtcData.CallMetadata(remotePeer, content.getSenderDevice()),
new WebRtcData.AnswerMetadata(message.getOpaque(), message.getSdp()),
new WebRtcData.ReceivedAnswerMetadata(remoteIdentityKey, content.getCallMessage().get().isMultiRing()));
}
@@ -592,10 +592,10 @@ public final class MessageContentProcessor {
callId = iceMessage.getId();
}
RemotePeer remotePeer = new RemotePeer(senderRecipient.getId());
RemotePeer remotePeer = new RemotePeer(senderRecipient.getId(), new CallId(callId));
ApplicationDependencies.getSignalCallManager()
.receivedIceCandidates(new WebRtcData.CallMetadata(remotePeer, new CallId(callId), content.getSenderDevice()),
.receivedIceCandidates(new WebRtcData.CallMetadata(remotePeer, content.getSenderDevice()),
iceCandidates);
}
@@ -608,10 +608,10 @@ public final class MessageContentProcessor {
if (smsMessageId.isPresent()) {
DatabaseFactory.getSmsDatabase(context).markAsMissedCall(smsMessageId.get(), false);
} else {
RemotePeer remotePeer = new RemotePeer(senderRecipient.getId());
RemotePeer remotePeer = new RemotePeer(senderRecipient.getId(), new CallId(message.getId()));
ApplicationDependencies.getSignalCallManager()
.receivedCallHangup(new WebRtcData.CallMetadata(remotePeer, new CallId(message.getId()), content.getSenderDevice()),
.receivedCallHangup(new WebRtcData.CallMetadata(remotePeer, content.getSenderDevice()),
new WebRtcData.HangupMetadata(message.getType(), message.isLegacy(), message.getDeviceId()));
}
}
@@ -622,10 +622,10 @@ public final class MessageContentProcessor {
{
log(String.valueOf(content.getTimestamp()), "handleCallBusyMessage");
RemotePeer remotePeer = new RemotePeer(senderRecipient.getId());
RemotePeer remotePeer = new RemotePeer(senderRecipient.getId(), new CallId(message.getId()));
ApplicationDependencies.getSignalCallManager()
.receivedCallBusy(new WebRtcData.CallMetadata(remotePeer, new CallId(message.getId()), content.getSenderDevice()));
.receivedCallBusy(new WebRtcData.CallMetadata(remotePeer, content.getSenderDevice()));
}
private void handleCallOpaqueMessage(@NonNull SignalServiceContent content,