Fixes for some multi-device bugs.

This commit is contained in:
Moxie Marlinspike 2014-02-02 16:44:02 -08:00
parent a0889130e5
commit 6e0ae70f02
3 changed files with 5 additions and 3 deletions

View File

@ -56,7 +56,7 @@
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>2.5.0</version>
<version>2.4.1</version>
</dependency>
<dependency>

View File

@ -88,12 +88,13 @@ public class MessageController {
rateLimiters.getMessagesLimiter().validate(source.getNumber());
try {
if (messages.getRelay() != null) sendLocalMessage(source, destinationName, messages);
if (messages.getRelay() == null) sendLocalMessage(source, destinationName, messages);
else sendRelayMessage(source, destinationName, messages);
} catch (NoSuchUserException e) {
throw new WebApplicationException(Response.status(404).build());
} catch (MismatchedDevicesException e) {
throw new WebApplicationException(Response.status(409)
.type(MediaType.APPLICATION_JSON_TYPE)
.entity(new MismatchedDevices(e.getMissingDevices(),
e.getExtraDevices()))
.build());

View File

@ -63,7 +63,8 @@ public abstract class Keys {
@Mapper(PreKeyMapper.class)
abstract PreKey retrieveFirst(@Bind("number") String number, @Bind("device_id") long deviceId);
@SqlQuery("SELECT DISTINCT ON (number, device_id) * FROM keys WHERE number = :number ORDER BY key_id ASC FOR UPDATE")
@SqlQuery("SELECT DISTINCT ON (number, device_id) * FROM keys WHERE number = :number ORDER BY number, device_id, key_id ASC")
@Mapper(PreKeyMapper.class)
abstract List<PreKey> retrieveFirst(@Bind("number") String number);
@Transaction(TransactionIsolationLevel.SERIALIZABLE)