otr safety guard

Daniel Gultsch created

Change summary

src/eu/siacs/conversations/utils/MessageParser.java | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)

Detailed changes

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

@@ -31,6 +31,7 @@ public class MessageParser {
 	}
 	
 	public static Message parseOtrChat(MessagePacket packet, Account account, XmppConnectionService service) {
+		boolean justStarted = false;
 		boolean properlyAddressed = (packet.getTo().split("/").length == 2) || (account.countPresences() == 1);
 		String[] fromParts = packet.getFrom().split("/");
 		Conversation conversation = service.findOrCreateConversation(account, fromParts[0],false);
@@ -39,6 +40,7 @@ public class MessageParser {
 			if (properlyAddressed) {
 				Log.d("xmppService","starting new otr session with "+packet.getFrom()+" because no valid otr session has been found");
 				conversation.startOtrSession(service.getApplicationContext(), fromParts[1]);
+				justStarted = true;
 			} else {
 				Log.d("xmppService",account.getJid()+": ignoring otr session with "+fromParts[0]);
 				return null;
@@ -50,6 +52,7 @@ public class MessageParser {
 				if (properlyAddressed) {
 					Log.d("xmppService","replacing otr session with "+packet.getFrom());
 					conversation.startOtrSession(service.getApplicationContext(), fromParts[1]);
+					justStarted = true;
 				} else {
 					return null;
 				}
@@ -86,7 +89,13 @@ public class MessageParser {
 				Log.d(LOGTAG,"otr session stoped");
 			}
 		} catch (Exception e) {
-			conversation.resetOtrSession();
+			Log.d(LOGTAG,"otr execption");
+			if (justStarted) {
+				Log.d(LOGTAG,"ran into safeguard");
+			} else {
+				Log.d(LOGTAG,"resett otr session");
+				conversation.resetOtrSession();
+			}
 			return null;
 		}