more bug fixes for the pgp problem

iNPUTmice created

Change summary

src/eu/siacs/conversations/parser/MessageParser.java | 122 ++++++++-----
1 file changed, 73 insertions(+), 49 deletions(-)

Detailed changes

src/eu/siacs/conversations/parser/MessageParser.java 🔗

@@ -13,45 +13,61 @@ import eu.siacs.conversations.xml.Element;
 import eu.siacs.conversations.xmpp.stanzas.MessagePacket;
 
 public class MessageParser {
-	
+
 	protected static final String LOGTAG = "xmppService";
 	private XmppConnectionService mXmppConnectionService;
-	
+
 	public MessageParser(XmppConnectionService service) {
 		this.mXmppConnectionService = service;
 	}
-	
+
 	public Message parseChat(MessagePacket packet, Account account) {
 		String[] fromParts = packet.getFrom().split("/");
-		Conversation conversation = mXmppConnectionService.findOrCreateConversation(account, fromParts[0],false);
+		Conversation conversation = mXmppConnectionService
+				.findOrCreateConversation(account, fromParts[0], false);
 		String pgpBody = getPgpBody(packet);
-		if (pgpBody!=null) {
-			return new Message(conversation, packet.getFrom(), pgpBody, Message.ENCRYPTION_PGP, Message.STATUS_RECIEVED);
+		if (pgpBody != null) {
+			return new Message(conversation, packet.getFrom(), pgpBody,
+					Message.ENCRYPTION_PGP, Message.STATUS_RECIEVED);
 		} else {
-			return new Message(conversation, packet.getFrom(), packet.getBody(), Message.ENCRYPTION_NONE, Message.STATUS_RECIEVED);
+			return new Message(conversation, packet.getFrom(),
+					packet.getBody(), Message.ENCRYPTION_NONE,
+					Message.STATUS_RECIEVED);
 		}
 	}
 
 	public Message parseOtrChat(MessagePacket packet, Account account) {
-		boolean properlyAddressed = (packet.getTo().split("/").length == 2) || (account.countPresences() == 1);
+		boolean properlyAddressed = (packet.getTo().split("/").length == 2)
+				|| (account.countPresences() == 1);
 		String[] fromParts = packet.getFrom().split("/");
-		Conversation conversation = mXmppConnectionService.findOrCreateConversation(account, fromParts[0],false);
+		Conversation conversation = mXmppConnectionService
+				.findOrCreateConversation(account, fromParts[0], false);
 		String body = packet.getBody();
 		if (!conversation.hasValidOtrSession()) {
 			if (properlyAddressed) {
-				Log.d("xmppService","starting new otr session with "+packet.getFrom()+" because no valid otr session has been found");
-				conversation.startOtrSession(mXmppConnectionService.getApplicationContext(), fromParts[1],false);
+				Log.d("xmppService",
+						"starting new otr session with "
+								+ packet.getFrom()
+								+ " because no valid otr session has been found");
+				conversation.startOtrSession(
+						mXmppConnectionService.getApplicationContext(),
+						fromParts[1], false);
 			} else {
-				Log.d("xmppService",account.getJid()+": ignoring otr session with "+fromParts[0]);
+				Log.d("xmppService", account.getJid()
+						+ ": ignoring otr session with " + fromParts[0]);
 				return null;
 			}
 		} else {
-			String foreignPresence = conversation.getOtrSession().getSessionID().getUserID();
+			String foreignPresence = conversation.getOtrSession()
+					.getSessionID().getUserID();
 			if (!foreignPresence.equals(fromParts[1])) {
 				conversation.resetOtrSession();
 				if (properlyAddressed) {
-					Log.d("xmppService","replacing otr session with "+packet.getFrom());
-					conversation.startOtrSession(mXmppConnectionService.getApplicationContext(), fromParts[1],false);
+					Log.d("xmppService",
+							"replacing otr session with " + packet.getFrom());
+					conversation.startOtrSession(
+							mXmppConnectionService.getApplicationContext(),
+							fromParts[1], false);
 				} else {
 					return null;
 				}
@@ -59,23 +75,21 @@ public class MessageParser {
 		}
 		try {
 			Session otrSession = conversation.getOtrSession();
-			SessionStatus before = otrSession
-					.getSessionStatus();
+			SessionStatus before = otrSession.getSessionStatus();
 			body = otrSession.transformReceiving(body);
 			SessionStatus after = otrSession.getSessionStatus();
-			if ((before != after)
-					&& (after == SessionStatus.ENCRYPTED)) {
+			if ((before != after) && (after == SessionStatus.ENCRYPTED)) {
 				Log.d(LOGTAG, "otr session etablished");
-				List<Message> messages = conversation
-						.getMessages();
+				List<Message> messages = conversation.getMessages();
 				for (int i = 0; i < messages.size(); ++i) {
 					Message msg = messages.get(i);
 					if ((msg.getStatus() == Message.STATUS_UNSEND)
 							&& (msg.getEncryption() == Message.ENCRYPTION_OTR)) {
-						MessagePacket outPacket = mXmppConnectionService.prepareMessagePacket(
-								account, msg, otrSession);
+						MessagePacket outPacket = mXmppConnectionService
+								.prepareMessagePacket(account, msg, otrSession);
 						msg.setStatus(Message.STATUS_SEND);
-						mXmppConnectionService.databaseBackend.updateMessage(msg);
+						mXmppConnectionService.databaseBackend
+								.updateMessage(msg);
 						account.getXmppConnection()
 								.sendMessagePacket(outPacket);
 					}
@@ -83,25 +97,29 @@ public class MessageParser {
 				mXmppConnectionService.updateUi(conversation, false);
 			} else if ((before != after) && (after == SessionStatus.FINISHED)) {
 				conversation.resetOtrSession();
-				Log.d(LOGTAG,"otr session stoped");
+				Log.d(LOGTAG, "otr session stoped");
 			}
-			//isEmpty is a work around for some weird clients which send emtpty strings over otr
-			if ((body == null)||(body.isEmpty())) {
+			// isEmpty is a work around for some weird clients which send emtpty
+			// strings over otr
+			if ((body == null) || (body.isEmpty())) {
 				return null;
 			}
-			return new Message(conversation, packet.getFrom(), body, Message.ENCRYPTION_OTR,Message.STATUS_RECIEVED);
+			return new Message(conversation, packet.getFrom(), body,
+					Message.ENCRYPTION_OTR, Message.STATUS_RECIEVED);
 		} catch (Exception e) {
 			conversation.resetOtrSession();
 			return null;
 		}
 	}
-	
+
 	public Message parseGroupchat(MessagePacket packet, Account account) {
 		int status;
 		String[] fromParts = packet.getFrom().split("/");
-		Conversation conversation = mXmppConnectionService.findOrCreateConversation(account, fromParts[0],true);
+		Conversation conversation = mXmppConnectionService
+				.findOrCreateConversation(account, fromParts[0], true);
 		if (packet.hasChild("subject")) {
-			conversation.getMucOptions().setSubject(packet.findChild("subject").getContent());
+			conversation.getMucOptions().setSubject(
+					packet.findChild("subject").getContent());
 			mXmppConnectionService.updateUi(conversation, false);
 			return null;
 		}
@@ -110,7 +128,8 @@ public class MessageParser {
 		}
 		String counterPart = fromParts[1];
 		if (counterPart.equals(conversation.getMucOptions().getNick())) {
-			if (mXmppConnectionService.markMessage(conversation, packet.getId(), Message.STATUS_SEND)) {
+			if (mXmppConnectionService.markMessage(conversation,
+					packet.getId(), Message.STATUS_SEND)) {
 				return null;
 			} else {
 				status = Message.STATUS_SEND;
@@ -119,29 +138,29 @@ public class MessageParser {
 			status = Message.STATUS_RECIEVED;
 		}
 		String pgpBody = getPgpBody(packet);
-		if (pgpBody==null) {
-			return new Message(conversation, counterPart, packet.getBody(), Message.ENCRYPTION_NONE, status);
+		if (pgpBody == null) {
+			return new Message(conversation, counterPart, packet.getBody(),
+					Message.ENCRYPTION_NONE, status);
 		} else {
-			return new Message(conversation, counterPart, pgpBody, Message.ENCRYPTION_PGP, status);
+			return new Message(conversation, counterPart, pgpBody,
+					Message.ENCRYPTION_PGP, status);
 		}
 	}
 
-	public Message parseCarbonMessage(MessagePacket packet,Account account) {
+	public Message parseCarbonMessage(MessagePacket packet, Account account) {
 		int status;
 		String fullJid;
 		Element forwarded;
 		if (packet.hasChild("received")) {
-			forwarded = packet.findChild("received").findChild(
-					"forwarded");
+			forwarded = packet.findChild("received").findChild("forwarded");
 			status = Message.STATUS_RECIEVED;
 		} else if (packet.hasChild("sent")) {
-			forwarded = packet.findChild("sent").findChild(
-					"forwarded");
+			forwarded = packet.findChild("sent").findChild("forwarded");
 			status = Message.STATUS_SEND;
 		} else {
 			return null;
 		}
-		if (forwarded==null) {
+		if (forwarded == null) {
 			return null;
 		}
 		Element message = forwarded.findChild("message");
@@ -153,23 +172,28 @@ public class MessageParser {
 			fullJid = message.getAttribute("to");
 		}
 		String[] parts = fullJid.split("/");
-		Conversation conversation = mXmppConnectionService.findOrCreateConversation(account, parts[0],false);
-		String pgpBody = getPgpBody(packet);
-		if (pgpBody!=null) {
-			return new Message(conversation,fullJid, pgpBody,Message.ENCRYPTION_PGP,status);
+		Conversation conversation = mXmppConnectionService
+				.findOrCreateConversation(account, parts[0], false);
+		String pgpBody = getPgpBody(message);
+		if (pgpBody != null) {
+			return new Message(conversation, fullJid, pgpBody,
+					Message.ENCRYPTION_PGP, status);
 		} else {
-			return new Message(conversation,fullJid,packet.getBody(),Message.ENCRYPTION_NONE,status);
+			String body = message.findChild("body").getContent();
+			return new Message(conversation, fullJid, body,
+					Message.ENCRYPTION_NONE, status);
 		}
 	}
 
 	public void parseError(MessagePacket packet, Account account) {
 		String[] fromParts = packet.getFrom().split("/");
-		mXmppConnectionService.markMessage(account, fromParts[0], packet.getId(), Message.STATUS_SEND_FAILED);
+		mXmppConnectionService.markMessage(account, fromParts[0],
+				packet.getId(), Message.STATUS_SEND_FAILED);
 	}
 
-	private String getPgpBody(MessagePacket packet) {
+	private String getPgpBody(Element packet) {
 		Element child = packet.findChild("x", "jabber:x:encrypted");
-		if (child==null) {
+		if (child == null) {
 			return null;
 		} else {
 			return child.getContent();