Ensure that messages to initiate calls are marked urgent=true

This commit is contained in:
Scott Nonnenberg 2023-10-23 10:38:03 -07:00 committed by GitHub
parent 50a2ddf4b2
commit 70cd073a72
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 4 deletions

View file

@ -6,7 +6,6 @@ import { ipcRenderer } from 'electron';
import type { import type {
AudioDevice, AudioDevice,
CallId, CallId,
CallMessageUrgency,
DeviceId, DeviceId,
PeekInfo, PeekInfo,
UserId, UserId,
@ -18,6 +17,7 @@ import {
BusyMessage, BusyMessage,
Call, Call,
CallingMessage, CallingMessage,
CallMessageUrgency,
CallLogLevel, CallLogLevel,
CallState, CallState,
CanvasVideoRenderer, CanvasVideoRenderer,
@ -1146,6 +1146,7 @@ export class CallingClass {
}); });
} }
// Used specifically to send updates about in-progress group calls, nothing else
private async sendGroupCallUpdateMessage( private async sendGroupCallUpdateMessage(
conversationId: string, conversationId: string,
eraId: string eraId: string
@ -1188,7 +1189,7 @@ export class CallingClass {
sendOptions, sendOptions,
sendTarget: conversation.toSenderKeyTarget(), sendTarget: conversation.toSenderKeyTarget(),
sendType: 'callingMessage', sendType: 'callingMessage',
urgent: false, urgent: true,
}) })
), ),
sendType: 'callingMessage', sendType: 'callingMessage',
@ -1822,6 +1823,7 @@ export class CallingClass {
return this.handleOutgoingSignaling(userId, message, urgency); return this.handleOutgoingSignaling(userId, message, urgency);
} }
// Used to send a variety of group call messages, including the initial call message
private async handleSendCallMessageToGroup( private async handleSendCallMessageToGroup(
groupIdBytes: Buffer, groupIdBytes: Buffer,
data: Buffer, data: Buffer,
@ -1845,6 +1847,10 @@ export class CallingClass {
urgency urgency
); );
// If this message isn't droppable, we'll wake up recipient devices. The important one
// is the first message to start the call.
const urgent = urgency === CallMessageUrgency.HandleImmediately;
// We "fire and forget" because sending this message is non-essential. // We "fire and forget" because sending this message is non-essential.
// We also don't sync this message. // We also don't sync this message.
const { ContentHint } = Proto.UnidentifiedSenderMessage.Message; const { ContentHint } = Proto.UnidentifiedSenderMessage.Message;
@ -1860,7 +1866,7 @@ export class CallingClass {
sendTarget: conversation.toSenderKeyTarget(), sendTarget: conversation.toSenderKeyTarget(),
sendType: 'callingMessage', sendType: 'callingMessage',
timestamp, timestamp,
urgent: false, urgent,
}), }),
{ messageIds: [], sendType: 'callingMessage' } { messageIds: [], sendType: 'callingMessage' }
) )
@ -1966,6 +1972,7 @@ export class CallingClass {
} }
} }
// Used for all 1:1 call messages, including the initial message to start the call
private async handleOutgoingSignaling( private async handleOutgoingSignaling(
remoteUserId: UserId, remoteUserId: UserId,
message: CallingMessage, message: CallingMessage,
@ -1981,12 +1988,18 @@ export class CallingClass {
return false; return false;
} }
// We want 1:1 call initiate messages to wake up recipient devices, but not others
const urgent =
urgency === CallMessageUrgency.HandleImmediately ||
Boolean(message.offer);
try { try {
assertDev(isAciString(remoteUserId), 'remoteUserId is not a aci'); assertDev(isAciString(remoteUserId), 'remoteUserId is not a aci');
const result = await handleMessageSend( const result = await handleMessageSend(
window.textsecure.messaging.sendCallingMessage( window.textsecure.messaging.sendCallingMessage(
remoteUserId, remoteUserId,
callingMessageToProto(message, urgency), callingMessageToProto(message, urgency),
urgent,
sendOptions sendOptions
), ),
{ messageIds: [], sendType: 'callingMessage' } { messageIds: [], sendType: 'callingMessage' }

View file

@ -1702,6 +1702,7 @@ export default class MessageSender {
async sendCallingMessage( async sendCallingMessage(
serviceId: ServiceIdString, serviceId: ServiceIdString,
callingMessage: Readonly<Proto.ICallingMessage>, callingMessage: Readonly<Proto.ICallingMessage>,
urgent: boolean,
options?: Readonly<SendOptionsType> options?: Readonly<SendOptionsType>
): Promise<CallbackResultType> { ): Promise<CallbackResultType> {
const recipients = [serviceId]; const recipients = [serviceId];
@ -1727,7 +1728,7 @@ export default class MessageSender {
contentHint: ContentHint.DEFAULT, contentHint: ContentHint.DEFAULT,
groupId: undefined, groupId: undefined,
options, options,
urgent: true, urgent,
}); });
} }