ignore outgoing invite

outgoing, mediated invites are of type=normal and can end up in MAM.
We want to ignore those if they get mirrored back to us
This commit is contained in:
Daniel Gultsch 2023-10-17 07:22:22 +02:00
parent fda6693b6d
commit 063f30ded2
No known key found for this signature in database
GPG key ID: F43D18AD2A0982C2
2 changed files with 16 additions and 9 deletions

View file

@ -194,8 +194,8 @@ public class MessageGenerator extends AbstractGenerator {
return packet; return packet;
} }
public MessagePacket invite(Conversation conversation, Jid contact) { public MessagePacket invite(final Conversation conversation, final Jid contact) {
MessagePacket packet = new MessagePacket(); final MessagePacket packet = new MessagePacket();
packet.setTo(conversation.getJid().asBareJid()); packet.setTo(conversation.getJid().asBareJid());
packet.setFrom(conversation.getAccount().getJid()); packet.setFrom(conversation.getAccount().getJid());
Element x = new Element("x"); Element x = new Element("x");

View file

@ -170,14 +170,19 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece
return null; return null;
} }
private Invite extractInvite(Element message) { private Invite extractInvite(final Element message) {
final Element mucUser = message.findChild("x", Namespace.MUC_USER); final Element mucUser = message.findChild("x", Namespace.MUC_USER);
if (mucUser != null) { if (mucUser != null) {
Element invite = mucUser.findChild("invite"); final Element invite = mucUser.findChild("invite");
if (invite != null) { if (invite != null) {
String password = mucUser.findChildContent("password"); final String password = mucUser.findChildContent("password");
Jid from = InvalidJid.getNullForInvalid(invite.getAttributeAsJid("from")); final Jid from = InvalidJid.getNullForInvalid(invite.getAttributeAsJid("from"));
Jid room = InvalidJid.getNullForInvalid(message.getAttributeAsJid("from")); final Jid to = InvalidJid.getNullForInvalid(invite.getAttributeAsJid("to"));
if (to != null && from == null) {
Log.d(Config.LOGTAG,"do not parse outgoing mediated invite "+message);
return null;
}
final Jid room = InvalidJid.getNullForInvalid(message.getAttributeAsJid("from"));
if (room == null) { if (room == null) {
return null; return null;
} }
@ -454,8 +459,10 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece
final Invite invite = extractInvite(packet); final Invite invite = extractInvite(packet);
if (invite != null) { if (invite != null) {
if (isTypeGroupChat) { if (invite.jid.asBareJid().equals(account.getJid().asBareJid())) {
Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": ignoring invite to " + invite.jid + " because type=groupchat"); Log.d(Config.LOGTAG,account.getJid().asBareJid()+": ignore invite to "+invite.jid+" because it matches account");
} else if (isTypeGroupChat) {
Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": ignoring invite to " + invite.jid + " because it was received as group chat");
} else if (invite.direct && (mucUserElement != null || invite.inviter == null || mXmppConnectionService.isMuc(account, invite.inviter))) { } else if (invite.direct && (mucUserElement != null || invite.inviter == null || mXmppConnectionService.isMuc(account, invite.inviter))) {
Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": ignoring direct invite to " + invite.jid + " because it was received in MUC"); Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": ignoring direct invite to " + invite.jid + " because it was received in MUC");
} else { } else {