Investigate further on muc omemo message sending. Below is the aTalk log upon executed mMultiUserChat.sendMessage(encryptedMucMessage) statement.
In normal muc operation after muc.sendMessage(), the xmpp server actually relays the earlier sent message to all the conference members including the sender himself. It appears that, smack omemo is currently not handling this relay message.
Not sure if Smack has any plan to include support to process this relay message, or leave it to application layer to decrypt the message for display.
aTalk currently is not handling the relay omemo encrypted message, so it displays text of the omemo encryptedMessage in the chat window.
“I sent you an OMEMO encrypted message but your client doesn’t seem to support that. Find more information on https://conversations.im/omemo”
Note: xmpp server will also relays any muc history messages that are sent from other members while the user was offline
Below is the an extraction of aTalk in handling the muc relay messages in plain mode.
===========================
@Override
public void processMessage(org.jivesoftware.smack.packet.Message msg)
{
if (msg == null)
return;
Date timeStamp;
DelayInformation delayInfo = msg.getExtension(DelayInformation.ELEMENT, DelayInformation.NAMESPACE);
if (delayInfo != null) {
timeStamp = delayInfo.getStamp();
// This is a delayed chat room message, a history message for the room coming from
// server. Lets check have we already shown this message and if this is the case
// skip it otherwise save it as last seen delayed message
if (lastSeenDelayedMessage == null) {
// initialise this from configuration
String timestamp = ConfigurationUtils.getChatRoomProperty(mProvider,
getName(), LAST_SEEN_DELAYED_MESSAGE_PROP);
try {
lastSeenDelayedMessage = new Date(Long.parseLong(timestamp));
}
catch (Throwable ex) {
ex.printStackTrace();
}
}
if (lastSeenDelayedMessage != null && !timeStamp.after(lastSeenDelayedMessage))
return;
// save it in configuration
ConfigurationUtils.updateChatRoomProperty(mProvider, getName(),
LAST_SEEN_DELAYED_MESSAGE_PROP, String.valueOf(timeStamp.getTime()));
lastSeenDelayedMessage = timeStamp;
}
else {
timeStamp = new Date();
}
// for delay message only
Jid jabberID = null;
MultipleAddresses mAddress = msg.getExtension(MultipleAddresses.ELEMENT,
MultipleAddresses.NAMESPACE);
if (mAddress != null) {
List<MultipleAddresses.Address> addresses = mAddress.getAddressesOfType(MultipleAddresses.Type.ofrom);
jabberID = addresses.get(0).getJid().asBareJid();
}
String msgBody = msg.getBody();
if (msgBody == null)
return;
ChatRoomMember member;
int messageReceivedEventType = ChatRoomMessageReceivedEvent.CONVERSATION_MESSAGE_RECEIVED;
Jid entityJid = msg.getFrom(); // chatRoom entityJid
Resourcepart fromNick = entityJid.getResourceOrNull();
// when the message comes from the room itself, it is a system message
if (entityJid.equals(getName())) {
messageReceivedEventType = ChatRoomMessageReceivedEvent.SYSTEM_MESSAGE_RECEIVED;
member = new ChatRoomMemberJabberImpl(ChatRoomJabberImpl.this, getName(), getName());
}
else {
member = members.get((EntityFullJid) entityJid);
}
// sometimes when connecting to rooms they send history when the member is no longer
// available we create a fake one so the messages to be displayed.
if (member == null) {
member = new ChatRoomMemberJabberImpl(ChatRoomJabberImpl.this, fromNick.toString(),
jabberID.toString());
}
if (logger.isDebugEnabled()) {
if (logger.isDebugEnabled())
logger.debug("Received from " + fromNick + " the message " + msg.toXML());
}
Message newMessage = createMessage(msgBody);
if (msg.getType() == org.jivesoftware.smack.packet.Message.Type.error) {
if (logger.isInfoEnabled())
logger.info("Message error received from: " + fromNick);
XMPPError error = msg.getError();
Condition errorCode = error.getCondition();
int errorResultCode = ChatRoomMessageDeliveryFailedEvent.UNKNOWN_ERROR;
String errorReason = error.getConditionText();
if (errorCode == XMPPError.Condition.service_unavailable) {
Condition errorCondition = error.getCondition();
if (Condition.service_unavailable == errorCondition) {
if (!member.getPresenceStatus().isOnline()) {
errorResultCode = ChatRoomMessageDeliveryFailedEvent.OFFLINE_MESSAGES_NOT_SUPPORTED;
}
}
}
ChatRoomMessageDeliveryFailedEvent evt = new ChatRoomMessageDeliveryFailedEvent(ChatRoomJabberImpl.this,
member, errorResultCode, errorReason, new Date(), newMessage);
fireMessageEvent(evt);
return;
}
// Check received message for sent message: either a delivery report or a message
// coming from the chaRoom server. Checking using nick OR jid in case user join
// with a different nick.
if (((getUserNickname() != null) && getUserNickname().equals(fromNick)) || ((jabberID != null)
&& jabberID.equals(getAccountId(member.getChatRoom())))) {
// message delivered
ChatRoomMessageDeliveredEvent msgDeliveredEvt = new ChatRoomMessageDeliveredEvent(
ChatRoomJabberImpl.this, timeStamp, newMessage,
ChatRoomMessageDeliveredEvent.CONVERSATION_MESSAGE_DELIVERED);
msgDeliveredEvt.setHistoryMessage(true);
fireMessageEvent(msgDeliveredEvt);
}
else {
// CONVERSATION_MESSAGE_RECEIVED or SYSTEM_MESSAGE_RECEIVED
ChatRoomMessageReceivedEvent msgReceivedEvt = new ChatRoomMessageReceivedEvent(
ChatRoomJabberImpl.this, member, timeStamp, newMessage,
messageReceivedEventType);
if (messageReceivedEventType == ChatRoomMessageReceivedEvent.CONVERSATION_MESSAGE_RECEIVED
&& newMessage.getContent().contains(getUserNickname() + “:”)) {
msgReceivedEvt.setImportantMessage(true);
}
msgReceivedEvt.setHistoryMessage(delayInfo != null);
fireMessageEvent(msgReceivedEvt);
}
}
=========== aTalk captured log on mMultiUserChat.sendMessage(encryptedMucMessage) ============
06-25 02:46:36.255 D/SMACK: SENT (0):
06-25 02:46:36.275 D/SMACK: RECV (0): http://jabber.org/protocol/muc#roominfo3
06-25 02:46:36.405 D/SMACK: RECV (0):
06-25 02:46:36.425 D/SMACK: SENT (0):
06-25 02:46:36.605 D/SMACK: SENT (0):
06-25 02:46:36.655 D/SMACK: RECV (0): 01creation@001474:502968:279177creation@001474:502968:279 177BT18u6ztLTVRNjP22kiGm+MKkAJOEIxQftz6x2u5qxsJ
vsZjh0Q/tLFRvoFCY3vv6XBnxlh0y/DxS7E lP/LKYfWn7af9XPEbFSg5KlxrqFdAGPKwhuhU6sQ6
4SRNPpdwAA==
BRzwoKsHyjwWgKTHRjnk6fYq4R77umIEP5Bn58Zf7n 9a
BUoJudpg45xQVf72XHRvP/n8+3h0Hpu+4KJdxsXIARFZ
Bb9crnWTCd1JjZst7IVusOZF+TMMHJSgyraIq6Mft1VV
BQLNPChjv4mYsJlJ1n7bF3vnQs23uqZVkIWrfLN7FIYE
Be9qu9BcxV7BtF8wZZCUohcDfZwUaHTw6IuIXsyuNZM7
Bchdh8/Ppipw/Rvnm+NgANjpSaXyWvaHT8hcTtdhRXYZ
BdWYz7pwc42IAHzThu5GKec3T1W/BZvHc4GJeBX6+Txl
BTQu1M8kxFNy8HLy27Pewkey6J1n5qxwJ8Am9+XUM75u
BYbEU1kDO1R3XFmH5KgJghGME6JvE2UEN4ozfkq8ugsA
Bfi1vvSpSN7/ZODapSdn1IiKJZ02mejCqm6SU9wSURtn
BWAVlbXbCEJzaSWf4BudHnN0WhibWDCqtJdnpcOceoxC
BSJeSjKVOdi7DtJUIqFSqxN9YfpDdbTHiDeRIDAOKM9B
BdU2hQjZxBgDIj5Bx5V+bS/auq0vbD7Yx4qBszI4fJMw
BZndDAOyIj3yS5CJojKsfhLfIsIXzcWknmvSOEGlwcJN
BZ+nHS9ej09TgQL85U/85s537AmZDaGeeXlUhQrRBONm
Be8U2LaV9NWCZlyfe0r+a2M4RuVv1wt/qGNqMgNaVhRg
Bb8CzNoH3TA/nuwqOGz8han+6VUEELSSEO6m9J9VA8kh
BYdeKEU1i6PYmN0VrkmA8UrgPkx4PMehqDcas+jRtXAW
BfxvMz62NBoCzSiGRjckKzzsp8AMlIFuaR8ICfteYWtg
BcjJfWvjOXP7QTLIkEDoJXhPzMome8Wk/srlaR+kyl4h
BdoqW7ceIWMmjB87P/9QnV1R83LE5nvZwHQgT3aXDUM2
Bex4T2bBNKrHWqDtBlU6y5vCqXxMAgsqIS77LMrwo6RT
BWT+7XktWKu2n/aDxezmz7DZMwGF1iqDDGwo0NqGJ2dc
BTWGSCojuuerDCAkN6iIYWfpxrNWZ03hFtZ5WEluAPxT
Bcbh03G68+jlrb2SgjTRLuK4YVwiTHZ9THHOzQrJK8Um
BbZxgq8DLaPaJy7yJuPJKlvFTN98ulD5XxS2xYjuuaI9
<preKeyPublic p
06-25 02:46:36.905 D/SMACK: RECV (0): reKeyId=‘270’>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
BaeW0uFUgE2DWLczGji3+qeJGWFutR3noVrb8He
06-25 02:46:37.345 D/SMACK: RECV (0):
06-25 02:46:37.365 D/SMACK: SENT (0):
06-25 02:46:40.705 D/SMACK: SENT (0): I sent you an OMEMO encrypted message but your client doesn’t seem to support that. Find more information on https://conversations.im/omemoMwgVEiEFQJPj6iIQ5Oic9FO/sjpmiMCWnVnCE85EyB97ySta41YaIQXiVJYpilf5 SjOSNYOzM9osNnaDAFWdwAh9bTovBWYwCSJiMwohBeQBRH9I6upyJ/PAHz8EulnnnKEWie9vBoZATopu tQQxECwYACIwzgmDMMIURqgvgwBT+9Uxpb7tT1+jmOxKVfcGyIB//tuIRMaXwVhieyEKJkoTsXB499SP iCr+f78oADABMwohBb7kzCqNoah9AtMsckU/6+wh7Q4+Vd7BsCi3hYb5SnxHEBYYACIwDoXrkNp wsYVc/wkzylfT5td3AZLiy06mIh98JJ8THLiN6P3KYjY4/JrA2bHA21y1ESezmGRGUmU=MwohBUr06WuOv/jbRi73gUFNvTJ14kJEYv10mYI47wDLz7A/EAwYACIwHXJ49w Xp/6iSqeOhsodr5UALxq7BImbOha0tUPhlVop34wVtNX/gY3U/K8YlBgIgiDytX0N2yk0= ZpqckHofiDbFMFLHezIOMw==bUYFGw==
06-25 02:46:40.725 D/SMACK: RECV (0):
06-25 02:46:40.835 D/SMACK: RECV (0): MwgVEiEFQJPj6iIQ5Oic9FO/sjpmiMCWnVnCE85EyB97ySta41YaIQXiVJYpilf5 SjOSNYOzM9osNnaDAFWdwAh9bTovBWYwCSJiMwohBeQBRH9I6upyJ/PAHz8EulnnnKEWie9vBoZATopu tQQxECwYACIwzgmDMMIURqgvgwBT+9Uxpb7tT1+jmOxKVfcGyIB//tuIRMaXwVhieyEKJkoTsXB499SP iCr+f78oADABMwohBb7kzCqNoah9AtMsckU/6+wh7Q4+Vd7BsCi3hYb5SnxHEBYYACIwDoXrkNp wsYVc/wkzylfT5td3AZLiy06mIh98JJ8THLiN6P3KYjY4/JrA2bHA21y1ESezmGRGUmU=MwohBUr06WuOv/jbRi73gUFNvTJ14kJEYv10mYI47wDLz7A/EAwYACIwHXJ49w Xp/6iSqeOhsodr5UALxq7BImbOha0tUPhlVop34wVtNX/gY3U/K8YlBgIgiDytX0N2yk0= ZpqckHofiDbFMFLHezIOMw==bUYFGw==I sent you an OMEMO encrypted message but your client doesn’t seem to support that. Find more information on https://conversations.im/omemo
06-25 02:46:40.955 D/SMACK: RECV (0):
06-25 02:46:40.965 D/SMACK: SENT (0):