sending warning to receiving client if that client doesn't support omemo.

Daniel Gultsch created

fixes #1873

Change summary

src/main/java/eu/siacs/conversations/crypto/OtrService.java          |  2 
src/main/java/eu/siacs/conversations/generator/MessageGenerator.java | 14 
2 files changed, 14 insertions(+), 2 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/crypto/OtrService.java 🔗

@@ -122,7 +122,7 @@ public class OtrService extends OtrCryptoEngineImpl implements OtrEngineHost {
 
 	@Override
 	public String getFallbackMessage(SessionID arg0) {
-		return "I would like to start a private (OTR encrypted) conversation but your client doesn’t seem to support that";
+		return MessageGenerator.OTR_FALLBACK_MESSAGE;
 	}
 
 	@Override

src/main/java/eu/siacs/conversations/generator/MessageGenerator.java 🔗

@@ -9,6 +9,7 @@ import java.util.Date;
 import java.util.Locale;
 import java.util.TimeZone;
 
+import eu.siacs.conversations.crypto.axolotl.AxolotlService;
 import eu.siacs.conversations.crypto.axolotl.XmppAxolotlMessage;
 import eu.siacs.conversations.entities.Account;
 import eu.siacs.conversations.entities.Conversation;
@@ -20,6 +21,10 @@ import eu.siacs.conversations.xmpp.jid.Jid;
 import eu.siacs.conversations.xmpp.stanzas.MessagePacket;
 
 public class MessageGenerator extends AbstractGenerator {
+	public static final String OTR_FALLBACK_MESSAGE = "I would like to start a private (OTR encrypted) conversation but your client doesn’t seem to support that";
+	private static final String OMEMO_FALLBACK_MESSAGE = "I sent you an OMEMO encrypted message but your client doesn’t seem to support that. Find more information on https://conversations.im/omemo";
+	private static final String PGP_FALLBACK_MESSAGE = "I sent you a PGP encrypted message but your client doesn’t seem to support that.";
+
 	public MessageGenerator(XmppConnectionService service) {
 		super(service);
 	}
@@ -67,11 +72,18 @@ public class MessageGenerator extends AbstractGenerator {
 		if (axolotlMessage == null) {
 			return null;
 		}
+		if (!recipientSupportsOmemo(message)) {
+			packet.setBody(OMEMO_FALLBACK_MESSAGE);
+		}
 		packet.setAxolotlMessage(axolotlMessage.toElement());
 		packet.addChild("store", "urn:xmpp:hints");
 		return packet;
 	}
 
+	private static boolean recipientSupportsOmemo(Message message) {
+		return message.getContact().getPresences().allOrNonSupport(AxolotlService.PEP_DEVICE_LIST_NOTIFY);
+	}
+
 	public static void addMessageHints(MessagePacket packet) {
 		packet.addChild("private", "urn:xmpp:carbons:2");
 		packet.addChild("no-copy", "urn:xmpp:hints");
@@ -116,7 +128,7 @@ public class MessageGenerator extends AbstractGenerator {
 
 	public MessagePacket generatePgpChat(Message message) {
 		MessagePacket packet = preparePacket(message);
-		packet.setBody("This is an XEP-0027 encrypted message");
+		packet.setBody(PGP_FALLBACK_MESSAGE);
 		if (message.getEncryption() == Message.ENCRYPTION_DECRYPTED) {
 			packet.addChild("x", "jabber:x:encrypted").setContent(message.getEncryptedBody());
 		} else if (message.getEncryption() == Message.ENCRYPTION_PGP) {