mirror of
https://github.com/signalapp/Signal-Server
synced 2026-04-26 17:53:17 +01:00
54 lines
1.8 KiB
Java
54 lines
1.8 KiB
Java
package org.whispersystems.textsecuregcm.websocket;
|
|
|
|
import com.google.protobuf.InvalidProtocolBufferException;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.whispersystems.dispatch.DispatchChannel;
|
|
import org.whispersystems.textsecuregcm.entities.MessageProtos.Envelope;
|
|
import org.whispersystems.textsecuregcm.storage.MessagesManager;
|
|
import org.whispersystems.textsecuregcm.storage.PubSubProtos.PubSubMessage;
|
|
|
|
public class DeadLetterHandler implements DispatchChannel {
|
|
|
|
private final Logger logger = LoggerFactory.getLogger(DeadLetterHandler.class);
|
|
|
|
private final MessagesManager messagesManager;
|
|
|
|
public DeadLetterHandler(MessagesManager messagesManager) {
|
|
this.messagesManager = messagesManager;
|
|
}
|
|
|
|
@Override
|
|
public void onDispatchMessage(String channel, byte[] data) {
|
|
if (!WebSocketConnectionInfo.isType(channel)) {
|
|
try {
|
|
logger.info("Handling dead letter to: " + channel);
|
|
|
|
WebsocketAddress address = new WebsocketAddress(channel);
|
|
PubSubMessage pubSubMessage = PubSubMessage.parseFrom(data);
|
|
|
|
switch (pubSubMessage.getType().getNumber()) {
|
|
case PubSubMessage.Type.DELIVER_VALUE:
|
|
Envelope message = Envelope.parseFrom(pubSubMessage.getContent());
|
|
messagesManager.insert(address.getNumber(), address.getDeviceId(), message);
|
|
break;
|
|
}
|
|
} catch (InvalidProtocolBufferException e) {
|
|
logger.warn("Bad pubsub message", e);
|
|
} catch (InvalidWebsocketAddressException e) {
|
|
logger.warn("Invalid websocket address", e);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onDispatchSubscribed(String channel) {
|
|
logger.warn("DeadLetterHandler subscription notice! " + channel);
|
|
}
|
|
|
|
@Override
|
|
public void onDispatchUnsubscribed(String channel) {
|
|
logger.warn("DeadLetterHandler unsubscribe notice! " + channel);
|
|
}
|
|
}
|