import eu.siacs.conversations.entities.Conversation; //导入方法依赖的package包/类

private Message parseOtrChat(String body, Jid from, String id, Conversation conversation) {

String presence;

if (from.isBareJid()) {

presence = "";

} else {

presence = from.getResourcepart();

}

if (body.matches("^\\?OTRv\\d{1,2}\\?.*")) {

conversation.endOtrIfNeeded();

}

if (!conversation.hasValidOtrSession()) {

conversation.startOtrSession(presence,false);

} else {

String foreignPresence = conversation.getOtrSession().getSessionID().getUserID();

if (!foreignPresence.equals(presence)) {

conversation.endOtrIfNeeded();

conversation.startOtrSession(presence, false);

}

}

try {

conversation.setLastReceivedOtrMessageId(id);

Session otrSession = conversation.getOtrSession();

body = otrSession.transformReceiving(body);

SessionStatus status = otrSession.getSessionStatus();

if (body == null && status == SessionStatus.ENCRYPTED) {

mXmppConnectionService.onOtrSessionEstablished(conversation);

return null;

} else if (body == null && status == SessionStatus.FINISHED) {

conversation.resetOtrSession();

mXmppConnectionService.updateConversationUi();

return null;

} else if (body == null || (body.isEmpty())) {

return null;

}

if (body.startsWith(CryptoHelper.FILETRANSFER)) {

String key = body.substring(CryptoHelper.FILETRANSFER.length());

conversation.setSymmetricKey(CryptoHelper.hexToBytes(key));

return null;

}

Message finishedMessage = new Message(conversation, body, Message.ENCRYPTION_OTR, Message.STATUS_RECEIVED);

conversation.setLastReceivedOtrMessageId(null);

return finishedMessage;

} catch (Exception e) {

conversation.resetOtrSession();

return null;

}

}

更多推荐

java endo_Java Conversation.endOtrIfNeeded方法代码示例