Fix "413 on prekey fetch" errors.

pull/1/head
Matthew Chen 7 years ago
parent e89d8b40d7
commit 3011175cef

@ -212,8 +212,9 @@ NS_ASSUME_NONNULL_BEGIN
__block NSMutableArray *result = [NSMutableArray array]; __block NSMutableArray *result = [NSMutableArray array];
for (PhoneNumber *number in [self.parsedPhoneNumbers sortedArrayUsingSelector:@selector(compare:)]) { for (PhoneNumber *number in [self.parsedPhoneNumbers sortedArrayUsingSelector:@selector(compare:)]) {
SignalRecipient *_Nullable signalRecipient = SignalRecipient *_Nullable signalRecipient = [SignalRecipient registeredRecipientForRecipientId:number.toE164
[SignalRecipient registeredRecipientForRecipientId:number.toE164 transaction:transaction]; mustHaveDevices:YES
transaction:transaction];
if (signalRecipient) { if (signalRecipient) {
[result addObject:signalRecipient]; [result addObject:signalRecipient];
} }

@ -21,6 +21,7 @@ NS_ASSUME_NONNULL_BEGIN
- (instancetype)init NS_UNAVAILABLE; - (instancetype)init NS_UNAVAILABLE;
+ (nullable instancetype)registeredRecipientForRecipientId:(NSString *)recipientId + (nullable instancetype)registeredRecipientForRecipientId:(NSString *)recipientId
mustHaveDevices:(BOOL)mustHaveDevices
transaction:(YapDatabaseReadTransaction *)transaction; transaction:(YapDatabaseReadTransaction *)transaction;
+ (instancetype)getOrBuildUnsavedRecipientForRecipientId:(NSString *)recipientId + (instancetype)getOrBuildUnsavedRecipientForRecipientId:(NSString *)recipientId
transaction:(YapDatabaseReadTransaction *)transaction; transaction:(YapDatabaseReadTransaction *)transaction;

@ -41,8 +41,9 @@ NS_ASSUME_NONNULL_BEGIN
{ {
OWSAssertDebug(transaction); OWSAssertDebug(transaction);
OWSAssertDebug(recipientId.length > 0); OWSAssertDebug(recipientId.length > 0);
SignalRecipient *_Nullable recipient = [self registeredRecipientForRecipientId:recipientId transaction:transaction]; SignalRecipient *_Nullable recipient =
[self registeredRecipientForRecipientId:recipientId mustHaveDevices:NO transaction:transaction];
if (!recipient) { if (!recipient) {
recipient = [[self alloc] initWithTextSecureIdentifier:recipientId]; recipient = [[self alloc] initWithTextSecureIdentifier:recipientId];
} }
@ -96,16 +97,17 @@ NS_ASSUME_NONNULL_BEGIN
} }
+ (nullable instancetype)registeredRecipientForRecipientId:(NSString *)recipientId + (nullable instancetype)registeredRecipientForRecipientId:(NSString *)recipientId
mustHaveDevices:(BOOL)mustHaveDevices
transaction:(YapDatabaseReadTransaction *)transaction transaction:(YapDatabaseReadTransaction *)transaction
{ {
OWSAssertDebug(transaction); OWSAssertDebug(transaction);
OWSAssertDebug(recipientId.length > 0); OWSAssertDebug(recipientId.length > 0);
SignalRecipient *_Nullable signalRecipient = [self fetchObjectWithUniqueID:recipientId transaction:transaction]; SignalRecipient *_Nullable signalRecipient = [self fetchObjectWithUniqueID:recipientId transaction:transaction];
if (signalRecipient.devices.count > 0) { if (mustHaveDevices && signalRecipient.devices.count < 1) {
return signalRecipient; return nil;
} }
return nil; return signalRecipient;
} }
- (void)addDevices:(NSSet *)devices - (void)addDevices:(NSSet *)devices
@ -217,8 +219,7 @@ NS_ASSUME_NONNULL_BEGIN
+ (BOOL)isRegisteredRecipient:(NSString *)recipientId transaction:(YapDatabaseReadTransaction *)transaction + (BOOL)isRegisteredRecipient:(NSString *)recipientId transaction:(YapDatabaseReadTransaction *)transaction
{ {
SignalRecipient *_Nullable instance = [self registeredRecipientForRecipientId:recipientId transaction:transaction]; return nil != [self registeredRecipientForRecipientId:recipientId mustHaveDevices:YES transaction:transaction];
return instance.devices.count > 0;
} }
+ (SignalRecipient *)markRecipientAsRegisteredAndGet:(NSString *)recipientId + (SignalRecipient *)markRecipientAsRegisteredAndGet:(NSString *)recipientId
@ -227,7 +228,8 @@ NS_ASSUME_NONNULL_BEGIN
OWSAssertDebug(transaction); OWSAssertDebug(transaction);
OWSAssertDebug(recipientId.length > 0); OWSAssertDebug(recipientId.length > 0);
SignalRecipient *_Nullable instance = [self registeredRecipientForRecipientId:recipientId transaction:transaction]; SignalRecipient *_Nullable instance =
[self registeredRecipientForRecipientId:recipientId mustHaveDevices:YES transaction:transaction];
if (!instance) { if (!instance) {
OWSLogDebug(@"creating recipient: %@", recipientId); OWSLogDebug(@"creating recipient: %@", recipientId);
@ -262,7 +264,9 @@ NS_ASSUME_NONNULL_BEGIN
SignalRecipient *instance = [self getOrBuildUnsavedRecipientForRecipientId:recipientId SignalRecipient *instance = [self getOrBuildUnsavedRecipientForRecipientId:recipientId
transaction:transaction]; transaction:transaction];
OWSLogDebug(@"Marking recipient as not registered: %@", recipientId); OWSLogDebug(@"Marking recipient as not registered: %@", recipientId);
[instance removeDevices:instance.devices.set]; if (instance.devices.count > 0) {
[instance removeDevices:instance.devices.set];
}
[instance saveWithTransaction_internal:transaction]; [instance saveWithTransaction_internal:transaction];
} }

@ -1456,7 +1456,7 @@ NS_ASSUME_NONNULL_BEGIN
// Consult the device list cache we use for message sending // Consult the device list cache we use for message sending
// whether or not we know about this linked device. // whether or not we know about this linked device.
SignalRecipient *_Nullable recipient = SignalRecipient *_Nullable recipient =
[SignalRecipient registeredRecipientForRecipientId:localNumber transaction:transaction]; [SignalRecipient registeredRecipientForRecipientId:localNumber mustHaveDevices:NO transaction:transaction];
if (!recipient) { if (!recipient) {
OWSFailDebug(@"No local SignalRecipient."); OWSFailDebug(@"No local SignalRecipient.");
} else { } else {

Loading…
Cancel
Save