parse real jid from muc mam messages. (disabled)

Daniel Gultsch created

parsing this is dangerous if server doesn't filter properly
thus it is disabled in config

Change summary

src/main/java/eu/siacs/conversations/Config.java               |  2 
src/main/java/eu/siacs/conversations/parser/MessageParser.java | 16 +++
2 files changed, 17 insertions(+), 1 deletion(-)

Detailed changes

src/main/java/eu/siacs/conversations/Config.java ๐Ÿ”—

@@ -96,6 +96,8 @@ public final class Config {
 
 	public static final boolean IGNORE_ID_REWRITE_IN_MUC = true;
 
+	public static final boolean PARSE_REAL_JID_FROM_MUC_MAM = false; //dangerous if server doesnโ€™t filter
+
 	public static final long MILLISECONDS_IN_DAY = 24 * 60 * 60 * 1000;
 	public static final long MAM_MAX_CATCHUP =  MILLISECONDS_IN_DAY / 2;
 	public static final int MAM_MAX_MESSAGES = 500;

src/main/java/eu/siacs/conversations/parser/MessageParser.java ๐Ÿ”—

@@ -434,7 +434,21 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece
 			message.setOob(isOob);
 			message.markable = packet.hasChild("markable", "urn:xmpp:chat-markers:0");
 			if (conversationMultiMode) {
-				Jid trueCounterpart = conversation.getMucOptions().getTrueCounterpart(counterpart);
+				final Element item = mucUserElement == null ? null : mucUserElement.findChild("item");
+				Jid trueCounterpart;
+				if (Config.PARSE_REAL_JID_FROM_MUC_MAM && query != null && item != null) {
+					trueCounterpart = item.getAttributeAsJid("jid");
+					if (trueCounterpart != null) {
+						if (trueCounterpart.toBareJid().equals(account.getJid().toBareJid())) {
+							status = isTypeGroupChat ? Message.STATUS_SEND_RECEIVED : Message.STATUS_SEND;
+						} else {
+							status = Message.STATUS_RECEIVED;
+						}
+						message.setStatus(status);
+					}
+				} else {
+					trueCounterpart = conversation.getMucOptions().getTrueCounterpart(counterpart);
+				}
 				message.setTrueCounterpart(trueCounterpart);
 				if (!isTypeGroupChat) {
 					message.setType(Message.TYPE_PRIVATE);