reformat
This commit is contained in:
		
							parent
							
								
									fe8f0bd7f0
								
							
						
					
					
						commit
						ecedda8613
					
				| @ -39,10 +39,43 @@ import rocks.xmpp.addr.Jid; | |||||||
| 
 | 
 | ||||||
| public class MessageParser extends AbstractParser implements OnMessagePacketReceived { | public class MessageParser extends AbstractParser implements OnMessagePacketReceived { | ||||||
| 
 | 
 | ||||||
|  | 	private static final SimpleDateFormat TIME_FORMAT = new SimpleDateFormat("HH:mm:ss", Locale.ENGLISH); | ||||||
|  | 
 | ||||||
| 	public MessageParser(XmppConnectionService service) { | 	public MessageParser(XmppConnectionService service) { | ||||||
| 		super(service); | 		super(service); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	private static String extractStanzaId(Element packet, boolean isTypeGroupChat, Conversation conversation) { | ||||||
|  | 		final Jid by; | ||||||
|  | 		final boolean safeToExtract; | ||||||
|  | 		if (isTypeGroupChat) { | ||||||
|  | 			by = conversation.getJid().asBareJid(); | ||||||
|  | 			safeToExtract = conversation.getMucOptions().hasFeature(Namespace.STANZA_IDS); | ||||||
|  | 		} else { | ||||||
|  | 			Account account = conversation.getAccount(); | ||||||
|  | 			by = account.getJid().asBareJid(); | ||||||
|  | 			safeToExtract = account.getXmppConnection().getFeatures().stanzaIds(); | ||||||
|  | 		} | ||||||
|  | 		return safeToExtract ? extractStanzaId(packet, by) : null; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	private static String extractStanzaId(Element packet, Jid by) { | ||||||
|  | 		for (Element child : packet.getChildren()) { | ||||||
|  | 			if (child.getName().equals("stanza-id") | ||||||
|  | 					&& Namespace.STANZA_IDS.equals(child.getNamespace()) | ||||||
|  | 					&& by.equals(child.getAttributeAsJid("by"))) { | ||||||
|  | 				return child.getAttribute("id"); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		return null; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	private static Jid getTrueCounterpart(Element mucUserElement, Jid fallback) { | ||||||
|  | 		final Element item = mucUserElement == null ? null : mucUserElement.findChild("item"); | ||||||
|  | 		Jid result = item == null ? null : item.getAttributeAsJid("jid"); | ||||||
|  | 		return result != null ? result : fallback; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	private boolean extractChatState(Conversation c, final boolean isTypeGroupChat, final MessagePacket packet) { | 	private boolean extractChatState(Conversation c, final boolean isTypeGroupChat, final MessagePacket packet) { | ||||||
| 		ChatState state = ChatState.parse(packet); | 		ChatState state = ChatState.parse(packet); | ||||||
| 		if (state != null && c != null) { | 		if (state != null && c != null) { | ||||||
| @ -89,38 +122,12 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece | |||||||
| 				return finishedMessage; | 				return finishedMessage; | ||||||
| 			} | 			} | ||||||
| 		} else { | 		} else { | ||||||
| 			Log.d(Config.LOGTAG,conversation.getAccount().getJid().asBareJid()+": received OMEMO key transport message"); | 			Log.d(Config.LOGTAG, conversation.getAccount().getJid().asBareJid() + ": received OMEMO key transport message"); | ||||||
| 			service.processReceivingKeyTransportMessage(xmppAxolotlMessage, postpone); | 			service.processReceivingKeyTransportMessage(xmppAxolotlMessage, postpone); | ||||||
| 		} | 		} | ||||||
| 		return null; | 		return null; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	private class Invite { |  | ||||||
| 		final Jid jid; |  | ||||||
| 		final String password; |  | ||||||
| 		final Contact inviter; |  | ||||||
| 
 |  | ||||||
| 		Invite(Jid jid, String password, Contact inviter) { |  | ||||||
| 			this.jid = jid; |  | ||||||
| 			this.password = password; |  | ||||||
| 			this.inviter = inviter; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		public boolean execute(Account account) { |  | ||||||
| 			if (jid != null) { |  | ||||||
| 				Conversation conversation = mXmppConnectionService.findOrCreateConversation(account, jid, true, false); |  | ||||||
| 				if (!conversation.getMucOptions().online()) { |  | ||||||
| 					conversation.getMucOptions().setPassword(password); |  | ||||||
| 					mXmppConnectionService.databaseBackend.updateConversation(conversation); |  | ||||||
| 					mXmppConnectionService.joinMuc(conversation, inviter != null && inviter.mutualPresenceSubscription()); |  | ||||||
| 					mXmppConnectionService.updateConversationUi(); |  | ||||||
| 				} |  | ||||||
| 				return true; |  | ||||||
| 			} |  | ||||||
| 			return false; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	private Invite extractInvite(Account account, Element message) { | 	private Invite extractInvite(Account account, Element message) { | ||||||
| 		Element x = message.findChild("x", "http://jabber.org/protocol/muc#user"); | 		Element x = message.findChild("x", "http://jabber.org/protocol/muc#user"); | ||||||
| 		if (x != null) { | 		if (x != null) { | ||||||
| @ -142,31 +149,6 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece | |||||||
| 		return null; | 		return null; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	private static String extractStanzaId(Element packet, boolean isTypeGroupChat, Conversation conversation) { |  | ||||||
| 		final Jid by; |  | ||||||
| 		final boolean safeToExtract; |  | ||||||
| 		if (isTypeGroupChat) { |  | ||||||
| 			by = conversation.getJid().asBareJid(); |  | ||||||
| 			safeToExtract = conversation.getMucOptions().hasFeature(Namespace.STANZA_IDS); |  | ||||||
| 		} else { |  | ||||||
| 			Account account = conversation.getAccount(); |  | ||||||
| 			by = account.getJid().asBareJid(); |  | ||||||
| 			safeToExtract = account.getXmppConnection().getFeatures().stanzaIds(); |  | ||||||
| 		} |  | ||||||
| 		return safeToExtract ? extractStanzaId(packet, by) : null; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	private static String extractStanzaId(Element packet, Jid by) { |  | ||||||
| 		for (Element child : packet.getChildren()) { |  | ||||||
| 			if (child.getName().equals("stanza-id") |  | ||||||
| 					&& Namespace.STANZA_IDS.equals(child.getNamespace()) |  | ||||||
| 					&& by.equals(child.getAttributeAsJid("by"))) { |  | ||||||
| 				return child.getAttribute("id"); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		return null; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	private void parseEvent(final Element event, final Jid from, final Account account) { | 	private void parseEvent(final Element event, final Jid from, final Account account) { | ||||||
| 		Element items = event.findChild("items"); | 		Element items = event.findChild("items"); | ||||||
| 		String node = items == null ? null : items.getAttribute("node"); | 		String node = items == null ? null : items.getAttribute("node"); | ||||||
| @ -303,7 +285,7 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece | |||||||
| 
 | 
 | ||||||
| 		boolean isTypeGroupChat = packet.getType() == MessagePacket.TYPE_GROUPCHAT; | 		boolean isTypeGroupChat = packet.getType() == MessagePacket.TYPE_GROUPCHAT; | ||||||
| 		if (query != null && !query.muc() && isTypeGroupChat) { | 		if (query != null && !query.muc() && isTypeGroupChat) { | ||||||
| 			Log.e(Config.LOGTAG,account.getJid().asBareJid()+": received groupchat ("+from+") message on regular MAM request. skipping"); | 			Log.e(Config.LOGTAG, account.getJid().asBareJid() + ": received groupchat (" + from + ") message on regular MAM request. skipping"); | ||||||
| 			return; | 			return; | ||||||
| 		} | 		} | ||||||
| 		boolean isMucStatusMessage = from.isBareJid() && mucUserElement != null && mucUserElement.hasChild("status"); | 		boolean isMucStatusMessage = from.isBareJid() && mucUserElement != null && mucUserElement.hasChild("status"); | ||||||
| @ -342,7 +324,7 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece | |||||||
| 					return; | 					return; | ||||||
| 				} | 				} | ||||||
| 				status = Message.STATUS_RECEIVED; | 				status = Message.STATUS_RECEIVED; | ||||||
| 				if (remoteMsgId != null && conversation.findMessageWithRemoteId(remoteMsgId,counterpart) != null) { | 				if (remoteMsgId != null && conversation.findMessageWithRemoteId(remoteMsgId, counterpart) != null) { | ||||||
| 					return; | 					return; | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| @ -392,10 +374,10 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece | |||||||
| 					message = parseAxolotlChat(axolotlEncrypted, origin, conversation, status, query != null); | 					message = parseAxolotlChat(axolotlEncrypted, origin, conversation, status, query != null); | ||||||
| 				} else { | 				} else { | ||||||
| 					Message trial = null; | 					Message trial = null; | ||||||
| 					for(Jid fallback : fallbacksBySourceId) { | 					for (Jid fallback : fallbacksBySourceId) { | ||||||
| 						trial = parseAxolotlChat(axolotlEncrypted, fallback, conversation, status, query != null); | 						trial = parseAxolotlChat(axolotlEncrypted, fallback, conversation, status, query != null); | ||||||
| 						if (trial != null) { | 						if (trial != null) { | ||||||
| 							Log.d(Config.LOGTAG,account.getJid().asBareJid()+": decoded muc message using fallback"); | 							Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": decoded muc message using fallback"); | ||||||
| 							origin = fallback; | 							origin = fallback; | ||||||
| 							break; | 							break; | ||||||
| 						} | 						} | ||||||
| @ -403,7 +385,7 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece | |||||||
| 					message = trial; | 					message = trial; | ||||||
| 				} | 				} | ||||||
| 				if (message == null) { | 				if (message == null) { | ||||||
| 					if (query == null &&  extractChatState(mXmppConnectionService.find(account, counterpart.asBareJid()), isTypeGroupChat, packet)) { | 					if (query == null && extractChatState(mXmppConnectionService.find(account, counterpart.asBareJid()), isTypeGroupChat, packet)) { | ||||||
| 						mXmppConnectionService.updateConversationUi(); | 						mXmppConnectionService.updateConversationUi(); | ||||||
| 					} | 					} | ||||||
| 					if (query != null && status == Message.STATUS_SEND && remoteMsgId != null) { | 					if (query != null && status == Message.STATUS_SEND && remoteMsgId != null) { | ||||||
| @ -411,7 +393,7 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece | |||||||
| 						if (previouslySent != null && previouslySent.getServerMsgId() == null && serverMsgId != null) { | 						if (previouslySent != null && previouslySent.getServerMsgId() == null && serverMsgId != null) { | ||||||
| 							previouslySent.setServerMsgId(serverMsgId); | 							previouslySent.setServerMsgId(serverMsgId); | ||||||
| 							mXmppConnectionService.databaseBackend.updateMessage(previouslySent); | 							mXmppConnectionService.databaseBackend.updateMessage(previouslySent); | ||||||
| 							Log.d(Config.LOGTAG,account.getJid().asBareJid()+": encountered previously sent OMEMO message without serverId. updating..."); | 							Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": encountered previously sent OMEMO message without serverId. updating..."); | ||||||
| 						} | 						} | ||||||
| 					} | 					} | ||||||
| 					return; | 					return; | ||||||
| @ -521,7 +503,7 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece | |||||||
| 			boolean checkForDuplicates = (isTypeGroupChat && packet.hasChild("delay", "urn:xmpp:delay")) | 			boolean checkForDuplicates = (isTypeGroupChat && packet.hasChild("delay", "urn:xmpp:delay")) | ||||||
| 					|| message.getType() == Message.TYPE_PRIVATE | 					|| message.getType() == Message.TYPE_PRIVATE | ||||||
| 					|| message.getServerMsgId() != null; | 					|| message.getServerMsgId() != null; | ||||||
| 			if (checkForDuplicates ) { | 			if (checkForDuplicates) { | ||||||
| 				final Message duplicate = conversation.findDuplicateMessage(message); | 				final Message duplicate = conversation.findDuplicateMessage(message); | ||||||
| 				if (duplicate != null) { | 				if (duplicate != null) { | ||||||
| 					final boolean serverMsgIdUpdated; | 					final boolean serverMsgIdUpdated; | ||||||
| @ -535,13 +517,13 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece | |||||||
| 					} else { | 					} else { | ||||||
| 						serverMsgIdUpdated = false; | 						serverMsgIdUpdated = false; | ||||||
| 					} | 					} | ||||||
| 					Log.d(Config.LOGTAG, "skipping duplicate message with " + message.getCounterpart()+". serverMsgIdUpdated="+Boolean.toString(serverMsgIdUpdated)); | 					Log.d(Config.LOGTAG, "skipping duplicate message with " + message.getCounterpart() + ". serverMsgIdUpdated=" + Boolean.toString(serverMsgIdUpdated)); | ||||||
| 					return; | 					return; | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| 			if (query != null && query.getPagingOrder() == MessageArchiveService.PagingOrder.REVERSE) { | 			if (query != null && query.getPagingOrder() == MessageArchiveService.PagingOrder.REVERSE) { | ||||||
| 				conversation.prepend(query.getActualInThisQuery(),message); | 				conversation.prepend(query.getActualInThisQuery(), message); | ||||||
| 			} else { | 			} else { | ||||||
| 				conversation.add(message); | 				conversation.add(message); | ||||||
| 			} | 			} | ||||||
| @ -610,7 +592,7 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece | |||||||
| 				try { | 				try { | ||||||
| 					final XmppAxolotlMessage xmppAxolotlMessage = XmppAxolotlMessage.fromElement(axolotlEncrypted, origin.asBareJid()); | 					final XmppAxolotlMessage xmppAxolotlMessage = XmppAxolotlMessage.fromElement(axolotlEncrypted, origin.asBareJid()); | ||||||
| 					account.getAxolotlService().processReceivingKeyTransportMessage(xmppAxolotlMessage, query != null); | 					account.getAxolotlService().processReceivingKeyTransportMessage(xmppAxolotlMessage, query != null); | ||||||
| 					Log.d(Config.LOGTAG,account.getJid().asBareJid()+": omemo key transport message received from "+origin); | 					Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": omemo key transport message received from " + origin); | ||||||
| 				} catch (Exception e) { | 				} catch (Exception e) { | ||||||
| 					Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": invalid omemo key transport message received " + e.getMessage()); | 					Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": invalid omemo key transport message received " + e.getMessage()); | ||||||
| 					return; | 					return; | ||||||
| @ -692,7 +674,7 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece | |||||||
| 			String id = received.getAttribute("id"); | 			String id = received.getAttribute("id"); | ||||||
| 			if (packet.fromAccount(account)) { | 			if (packet.fromAccount(account)) { | ||||||
| 				if (query != null && id != null && packet.getTo() != null) { | 				if (query != null && id != null && packet.getTo() != null) { | ||||||
| 					query.removePendingReceiptRequest(new ReceiptRequest(packet.getTo(),id)); | 					query.removePendingReceiptRequest(new ReceiptRequest(packet.getTo(), id)); | ||||||
| 				} | 				} | ||||||
| 			} else { | 			} else { | ||||||
| 				mXmppConnectionService.markMessage(account, from.asBareJid(), received.getAttribute("id"), Message.STATUS_SEND_RECEIVED); | 				mXmppConnectionService.markMessage(account, from.asBareJid(), received.getAttribute("id"), Message.STATUS_SEND_RECEIVED); | ||||||
| @ -716,7 +698,7 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece | |||||||
| 							if (!message.isRead() && (query == null || query.isCatchup())) { //checking if message is unread fixes race conditions with reflections | 							if (!message.isRead() && (query == null || query.isCatchup())) { //checking if message is unread fixes race conditions with reflections | ||||||
| 								mXmppConnectionService.markRead(conversation); | 								mXmppConnectionService.markRead(conversation); | ||||||
| 							} | 							} | ||||||
| 						} else  if (!counterpart.isBareJid() && trueJid != null){ | 						} else if (!counterpart.isBareJid() && trueJid != null) { | ||||||
| 							ReadByMarker readByMarker = ReadByMarker.from(counterpart, trueJid); | 							ReadByMarker readByMarker = ReadByMarker.from(counterpart, trueJid); | ||||||
| 							if (message.addReadByMarker(readByMarker)) { | 							if (message.addReadByMarker(readByMarker)) { | ||||||
| 								Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": added read by (" + readByMarker.getRealJid() + ") to message '" + message.getBody() + "'"); | 								Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": added read by (" + readByMarker.getRealJid() + ") to message '" + message.getBody() + "'"); | ||||||
| @ -761,12 +743,6 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	private static Jid getTrueCounterpart(Element mucUserElement, Jid fallback) { |  | ||||||
| 		final Element item = mucUserElement == null ? null : mucUserElement.findChild("item"); |  | ||||||
| 		Jid result = item == null ? null : item.getAttributeAsJid("jid"); |  | ||||||
| 		return result != null ? result : fallback; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	private void processMessageReceipts(Account account, MessagePacket packet, MessageArchiveService.Query query) { | 	private void processMessageReceipts(Account account, MessagePacket packet, MessageArchiveService.Query query) { | ||||||
| 		final boolean markable = packet.hasChild("markable", "urn:xmpp:chat-markers:0"); | 		final boolean markable = packet.hasChild("markable", "urn:xmpp:chat-markers:0"); | ||||||
| 		final boolean request = packet.hasChild("request", "urn:xmpp:receipts"); | 		final boolean request = packet.hasChild("request", "urn:xmpp:receipts"); | ||||||
| @ -787,16 +763,40 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece | |||||||
| 			} | 			} | ||||||
| 		} else { //just catchup?? | 		} else { //just catchup?? | ||||||
| 			if (request) { | 			if (request) { | ||||||
| 				query.addPendingReceiptRequest(new ReceiptRequest(packet.getFrom(),packet.getId())); | 				query.addPendingReceiptRequest(new ReceiptRequest(packet.getFrom(), packet.getId())); | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	private static final SimpleDateFormat TIME_FORMAT = new SimpleDateFormat("HH:mm:ss", Locale.ENGLISH); |  | ||||||
| 
 |  | ||||||
| 	private void activateGracePeriod(Account account) { | 	private void activateGracePeriod(Account account) { | ||||||
| 		long duration = mXmppConnectionService.getLongPreference("grace_period_length", R.integer.grace_period) * 1000; | 		long duration = mXmppConnectionService.getLongPreference("grace_period_length", R.integer.grace_period) * 1000; | ||||||
| 		Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": activating grace period till " + TIME_FORMAT.format(new Date(System.currentTimeMillis() + duration))); | 		Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": activating grace period till " + TIME_FORMAT.format(new Date(System.currentTimeMillis() + duration))); | ||||||
| 		account.activateGracePeriod(duration); | 		account.activateGracePeriod(duration); | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
|  | 	private class Invite { | ||||||
|  | 		final Jid jid; | ||||||
|  | 		final String password; | ||||||
|  | 		final Contact inviter; | ||||||
|  | 
 | ||||||
|  | 		Invite(Jid jid, String password, Contact inviter) { | ||||||
|  | 			this.jid = jid; | ||||||
|  | 			this.password = password; | ||||||
|  | 			this.inviter = inviter; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		public boolean execute(Account account) { | ||||||
|  | 			if (jid != null) { | ||||||
|  | 				Conversation conversation = mXmppConnectionService.findOrCreateConversation(account, jid, true, false); | ||||||
|  | 				if (!conversation.getMucOptions().online()) { | ||||||
|  | 					conversation.getMucOptions().setPassword(password); | ||||||
|  | 					mXmppConnectionService.databaseBackend.updateConversation(conversation); | ||||||
|  | 					mXmppConnectionService.joinMuc(conversation, inviter != null && inviter.mutualPresenceSubscription()); | ||||||
|  | 					mXmppConnectionService.updateConversationUi(); | ||||||
|  | 				} | ||||||
|  | 				return true; | ||||||
|  | 			} | ||||||
|  | 			return false; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Daniel Gultsch
						Daniel Gultsch