From a0a5ca958596e47e273b04f0608acf23825abf7e Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Fri, 16 May 2014 22:44:54 +0200 Subject: [PATCH 1/2] fixed npe for otr sessions with non contacts --- .../siacs/conversations/entities/Conversation.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/eu/siacs/conversations/entities/Conversation.java b/src/eu/siacs/conversations/entities/Conversation.java index 20c70d29d..88d6279e9 100644 --- a/src/eu/siacs/conversations/entities/Conversation.java +++ b/src/eu/siacs/conversations/entities/Conversation.java @@ -269,11 +269,15 @@ public class Conversation extends AbstractEntity { return false; } else { String foreignPresence = this.otrSession.getSessionID().getUserID(); - if (!getContact().getPresences().containsKey(foreignPresence)) { - this.resetOtrSession(); - return false; + if (getContact()==null) { + return true; + } else { + if (!getContact().getPresences().containsKey(foreignPresence)) { + this.resetOtrSession(); + return false; + } + return true; } - return true; } } From cd1afbd39aade757c592e756ff1a1d2df27f1442 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Fri, 16 May 2014 22:46:15 +0200 Subject: [PATCH 2/2] reworked message to conferences --- .../conversations/parser/MessageParser.java | 6 +++- .../services/XmppConnectionService.java | 29 +++++++++---------- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/src/eu/siacs/conversations/parser/MessageParser.java b/src/eu/siacs/conversations/parser/MessageParser.java index 260780732..3733767f9 100644 --- a/src/eu/siacs/conversations/parser/MessageParser.java +++ b/src/eu/siacs/conversations/parser/MessageParser.java @@ -112,7 +112,11 @@ public class MessageParser { } String counterPart = fromParts[1]; if (counterPart.equals(conversation.getMucOptions().getNick())) { - status = Message.STATUS_SEND; + if (mXmppConnectionService.markMessage(conversation, packet.getId(), Message.STATUS_SEND)) { + return null; + } else { + status = Message.STATUS_SEND; + } } else { status = Message.STATUS_RECIEVED; } diff --git a/src/eu/siacs/conversations/services/XmppConnectionService.java b/src/eu/siacs/conversations/services/XmppConnectionService.java index 197eebc10..5a7a44b13 100644 --- a/src/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/eu/siacs/conversations/services/XmppConnectionService.java @@ -10,14 +10,12 @@ import java.util.List; import java.util.Locale; import java.util.Random; -import org.openintents.openpgp.OpenPgpError; import org.openintents.openpgp.util.OpenPgpApi; import org.openintents.openpgp.util.OpenPgpServiceConnection; import net.java.otr4j.OtrException; import net.java.otr4j.session.Session; import net.java.otr4j.session.SessionStatus; -import eu.siacs.conversations.R; import eu.siacs.conversations.crypto.PgpEngine; import eu.siacs.conversations.entities.Account; import eu.siacs.conversations.entities.Contact; @@ -47,7 +45,6 @@ import eu.siacs.conversations.xmpp.OnStatusChanged; import eu.siacs.conversations.xmpp.OnTLSExceptionReceived; import eu.siacs.conversations.xmpp.XmppConnection; import eu.siacs.conversations.xmpp.jingle.JingleConnectionManager; -import eu.siacs.conversations.xmpp.jingle.JingleFile; import eu.siacs.conversations.xmpp.jingle.OnJinglePacketReceived; import eu.siacs.conversations.xmpp.jingle.stanzas.JinglePacket; import eu.siacs.conversations.xmpp.stanzas.IqPacket; @@ -788,11 +785,11 @@ public class XmppConnectionService extends Service { // don't encrypt if (message.getConversation().getMode() == Conversation.MODE_SINGLE) { message.setStatus(Message.STATUS_SEND); - saveInDb = true; - addToConversation = true; } packet = prepareMessagePacket(account, message, null); send = true; + saveInDb = true; + addToConversation = true; } } } else { @@ -1481,21 +1478,23 @@ public class XmppConnectionService extends Service { public boolean markMessage(Account account, String recipient, String uuid, int status) { - boolean marked = false; for (Conversation conversation : getConversations()) { if (conversation.getContactJid().equals(recipient) && conversation.getAccount().equals(account)) { - for (Message message : conversation.getMessages()) { - if (message.getUuid().equals(uuid)) { - markMessage(message, status); - marked = true; - break; - } - } - break; + return markMessage(conversation, uuid, status); } } - return marked; + return false; + } + + public boolean markMessage(Conversation conversation, String uuid, int status) { + for (Message message : conversation.getMessages()) { + if (message.getUuid().equals(uuid)) { + markMessage(message, status); + return true; + } + } + return false; } public void markMessage(Message message, int status) {