2017-06-09 04:23:18 +02:00
|
|
|
//
|
2019-01-14 17:00:24 +01:00
|
|
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
2017-06-09 04:23:18 +02:00
|
|
|
//
|
2016-12-18 22:08:26 +01:00
|
|
|
|
|
|
|
#import "OWSOutgoingCallMessage.h"
|
2018-08-02 19:29:24 +02:00
|
|
|
#import "ProtoUtils.h"
|
2017-08-04 15:33:56 +02:00
|
|
|
#import "SignalRecipient.h"
|
2017-08-01 19:53:51 +02:00
|
|
|
#import "TSContactThread.h"
|
2018-09-21 21:41:10 +02:00
|
|
|
#import <SignalCoreKit/NSDate+OWS.h>
|
2018-08-01 23:13:01 +02:00
|
|
|
#import <SignalServiceKit/SignalServiceKit-Swift.h>
|
2016-12-18 22:08:26 +01:00
|
|
|
|
|
|
|
NS_ASSUME_NONNULL_BEGIN
|
|
|
|
|
|
|
|
@implementation OWSOutgoingCallMessage
|
|
|
|
|
|
|
|
- (instancetype)initWithThread:(TSThread *)thread
|
|
|
|
{
|
2018-10-03 23:41:43 +02:00
|
|
|
// MJK TODO - safe to remove senderTimestamp
|
2018-09-20 22:10:35 +02:00
|
|
|
self = [super initOutgoingMessageWithTimestamp:[NSDate ows_millisecondTimeStamp]
|
|
|
|
inThread:thread
|
|
|
|
messageBody:nil
|
|
|
|
attachmentIds:[NSMutableArray new]
|
|
|
|
expiresInSeconds:0
|
|
|
|
expireStartedAt:0
|
|
|
|
isVoiceMessage:NO
|
|
|
|
groupMetaMessage:TSGroupMetaMessageUnspecified
|
|
|
|
quotedMessage:nil
|
2019-01-14 17:00:24 +01:00
|
|
|
contactShare:nil
|
|
|
|
linkPreview:nil];
|
2016-12-18 22:08:26 +01:00
|
|
|
if (!self) {
|
|
|
|
return self;
|
|
|
|
}
|
|
|
|
|
|
|
|
return self;
|
|
|
|
}
|
|
|
|
|
2018-08-06 17:36:57 +02:00
|
|
|
- (instancetype)initWithThread:(TSThread *)thread offerMessage:(SSKProtoCallMessageOffer *)offerMessage
|
2016-12-18 22:08:26 +01:00
|
|
|
{
|
|
|
|
self = [self initWithThread:thread];
|
|
|
|
if (!self) {
|
|
|
|
return self;
|
|
|
|
}
|
|
|
|
|
|
|
|
_offerMessage = offerMessage;
|
|
|
|
|
|
|
|
return self;
|
|
|
|
}
|
|
|
|
|
2018-08-06 17:40:58 +02:00
|
|
|
- (instancetype)initWithThread:(TSThread *)thread answerMessage:(SSKProtoCallMessageAnswer *)answerMessage
|
2016-12-18 22:08:26 +01:00
|
|
|
{
|
|
|
|
self = [self initWithThread:thread];
|
|
|
|
if (!self) {
|
|
|
|
return self;
|
|
|
|
}
|
|
|
|
|
|
|
|
_answerMessage = answerMessage;
|
|
|
|
|
|
|
|
return self;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (instancetype)initWithThread:(TSThread *)thread
|
2018-08-06 17:49:25 +02:00
|
|
|
iceUpdateMessages:(NSArray<SSKProtoCallMessageIceUpdate *> *)iceUpdateMessages
|
2016-12-18 22:08:26 +01:00
|
|
|
{
|
|
|
|
self = [self initWithThread:thread];
|
|
|
|
if (!self) {
|
|
|
|
return self;
|
|
|
|
}
|
|
|
|
|
|
|
|
_iceUpdateMessages = iceUpdateMessages;
|
|
|
|
|
|
|
|
return self;
|
|
|
|
}
|
|
|
|
|
2018-08-06 18:22:55 +02:00
|
|
|
- (instancetype)initWithThread:(TSThread *)thread hangupMessage:(SSKProtoCallMessageHangup *)hangupMessage
|
2016-12-18 22:08:26 +01:00
|
|
|
{
|
|
|
|
self = [self initWithThread:thread];
|
|
|
|
if (!self) {
|
|
|
|
return self;
|
|
|
|
}
|
|
|
|
|
|
|
|
_hangupMessage = hangupMessage;
|
|
|
|
|
|
|
|
return self;
|
|
|
|
}
|
|
|
|
|
2018-08-06 18:30:35 +02:00
|
|
|
- (instancetype)initWithThread:(TSThread *)thread busyMessage:(SSKProtoCallMessageBusy *)busyMessage
|
2016-12-18 22:08:26 +01:00
|
|
|
{
|
|
|
|
self = [self initWithThread:thread];
|
|
|
|
if (!self) {
|
|
|
|
return self;
|
|
|
|
}
|
|
|
|
|
|
|
|
_busyMessage = busyMessage;
|
|
|
|
|
|
|
|
return self;
|
|
|
|
}
|
|
|
|
|
|
|
|
#pragma mark - TSOutgoingMessage overrides
|
|
|
|
|
|
|
|
- (BOOL)shouldSyncTranscript
|
|
|
|
{
|
|
|
|
return NO;
|
|
|
|
}
|
|
|
|
|
2017-09-27 23:13:29 +02:00
|
|
|
- (BOOL)isSilent
|
|
|
|
{
|
|
|
|
// Avoid "phantom messages" for "outgoing call messages".
|
|
|
|
|
|
|
|
return YES;
|
|
|
|
}
|
|
|
|
|
2018-08-01 23:13:01 +02:00
|
|
|
- (nullable NSData *)buildPlainTextData:(SignalRecipient *)recipient
|
2016-12-18 22:08:26 +01:00
|
|
|
{
|
2018-09-06 19:01:24 +02:00
|
|
|
OWSAssertDebug(recipient);
|
2017-08-04 15:33:56 +02:00
|
|
|
|
2018-09-24 15:26:08 +02:00
|
|
|
SSKProtoContentBuilder *builder = [SSKProtoContent builder];
|
2018-08-01 23:13:01 +02:00
|
|
|
[builder setCallMessage:[self buildCallMessage:recipient.recipientId]];
|
|
|
|
|
|
|
|
NSError *error;
|
2018-08-03 20:52:55 +02:00
|
|
|
NSData *_Nullable data = [builder buildSerializedDataAndReturnError:&error];
|
2018-08-02 00:00:58 +02:00
|
|
|
if (error || !data) {
|
2018-08-27 18:51:32 +02:00
|
|
|
OWSFailDebug(@"could not serialize protobuf: %@", error);
|
2018-08-01 23:13:01 +02:00
|
|
|
return nil;
|
|
|
|
}
|
|
|
|
return data;
|
2016-12-18 22:08:26 +01:00
|
|
|
}
|
|
|
|
|
2018-08-01 23:13:01 +02:00
|
|
|
- (nullable SSKProtoCallMessage *)buildCallMessage:(NSString *)recipientId
|
2016-12-18 22:08:26 +01:00
|
|
|
{
|
2018-09-24 15:26:08 +02:00
|
|
|
SSKProtoCallMessageBuilder *builder = [SSKProtoCallMessage builder];
|
2016-12-18 22:08:26 +01:00
|
|
|
|
|
|
|
if (self.offerMessage) {
|
2018-08-06 17:36:57 +02:00
|
|
|
[builder setOffer:self.offerMessage];
|
2016-12-18 22:08:26 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
if (self.answerMessage) {
|
2018-08-06 17:40:58 +02:00
|
|
|
[builder setAnswer:self.answerMessage];
|
2016-12-18 22:08:26 +01:00
|
|
|
}
|
|
|
|
|
2018-08-06 17:49:25 +02:00
|
|
|
if (self.iceUpdateMessages.count > 0) {
|
|
|
|
[builder setIceUpdate:self.iceUpdateMessages];
|
2016-12-18 22:08:26 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
if (self.hangupMessage) {
|
2018-08-06 18:22:55 +02:00
|
|
|
[builder setHangup:self.hangupMessage];
|
2016-12-18 22:08:26 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
if (self.busyMessage) {
|
2018-08-06 18:30:35 +02:00
|
|
|
[builder setBusy:self.busyMessage];
|
2016-12-18 22:08:26 +01:00
|
|
|
}
|
|
|
|
|
2018-08-02 19:29:24 +02:00
|
|
|
[ProtoUtils addLocalProfileKeyIfNecessary:self.thread recipientId:recipientId callMessageBuilder:builder];
|
|
|
|
|
2018-08-01 23:13:01 +02:00
|
|
|
NSError *error;
|
|
|
|
SSKProtoCallMessage *_Nullable result = [builder buildAndReturnError:&error];
|
|
|
|
if (error || !result) {
|
2018-08-27 18:51:32 +02:00
|
|
|
OWSFailDebug(@"could not build protobuf: %@", error);
|
2018-08-01 23:13:01 +02:00
|
|
|
return nil;
|
|
|
|
}
|
|
|
|
return result;
|
2016-12-18 22:08:26 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
#pragma mark - TSYapDatabaseObject overrides
|
|
|
|
|
2017-11-15 23:53:16 +01:00
|
|
|
- (BOOL)shouldBeSaved
|
2016-12-18 22:08:26 +01:00
|
|
|
{
|
2017-11-15 23:53:16 +01:00
|
|
|
return NO;
|
2016-12-18 22:08:26 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
- (NSString *)debugDescription
|
|
|
|
{
|
|
|
|
NSString *className = NSStringFromClass([self class]);
|
|
|
|
|
|
|
|
NSString *payload;
|
|
|
|
if (self.offerMessage) {
|
|
|
|
payload = @"offerMessage";
|
|
|
|
} else if (self.answerMessage) {
|
|
|
|
payload = @"answerMessage";
|
|
|
|
} else if (self.iceUpdateMessages.count > 0) {
|
2019-01-30 19:17:40 +01:00
|
|
|
payload = [NSString stringWithFormat:@"iceUpdateMessages: %lu", (unsigned long)self.iceUpdateMessages.count];
|
2016-12-18 22:08:26 +01:00
|
|
|
} else if (self.hangupMessage) {
|
|
|
|
payload = @"hangupMessage";
|
|
|
|
} else if (self.busyMessage) {
|
|
|
|
payload = @"busyMessage";
|
|
|
|
} else {
|
|
|
|
payload = @"none";
|
|
|
|
}
|
|
|
|
|
|
|
|
return [NSString stringWithFormat:@"%@ with payload: %@", className, payload];
|
|
|
|
}
|
|
|
|
|
|
|
|
@end
|
|
|
|
|
|
|
|
NS_ASSUME_NONNULL_END
|