diff --git a/smack-core/src/main/java/org/jivesoftware/smack/filter/EmptyToMatcher.java b/smack-core/src/main/java/org/jivesoftware/smack/filter/EmptyToMatcher.java new file mode 100644 index 000000000..0ac3b9b1b --- /dev/null +++ b/smack-core/src/main/java/org/jivesoftware/smack/filter/EmptyToMatcher.java @@ -0,0 +1,42 @@ +/** + * + * Copyright © 2016 Florian Schmaus + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jivesoftware.smack.filter; + +import org.jivesoftware.smack.packet.Stanza; +import org.jxmpp.jid.Jid; + +public final class EmptyToMatcher implements StanzaFilter { + + public static final EmptyToMatcher INSTANCE = new EmptyToMatcher(); + + private EmptyToMatcher() { + } + + @Override + public boolean accept(Stanza packet) { + Jid packetTo = packet.getTo(); + if (packetTo == null) { + return true; + } + return false; + } + + @Override + public String toString() { + return getClass().getSimpleName(); + } +} diff --git a/smack-core/src/main/java/org/jivesoftware/smack/filter/PresenceTypeFilter.java b/smack-core/src/main/java/org/jivesoftware/smack/filter/PresenceTypeFilter.java index a737091e6..95a2d3013 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/filter/PresenceTypeFilter.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/filter/PresenceTypeFilter.java @@ -35,6 +35,8 @@ public final class PresenceTypeFilter extends FlexibleStanzaTypeFilter public static final PresenceTypeFilter ERROR = new PresenceTypeFilter(Type.error); public static final PresenceTypeFilter PROBE = new PresenceTypeFilter(Type.probe); + public static final StanzaFilter OUTGOING_PRESENCE_BROADCAST = new AndFilter(AVAILABLE, EmptyToMatcher.INSTANCE); + private final Presence.Type type; private PresenceTypeFilter(Presence.Type type) { diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/caps/EntityCapsManager.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/caps/EntityCapsManager.java index 730ad5ec5..e1d2fbb40 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/caps/EntityCapsManager.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/caps/EntityCapsManager.java @@ -340,7 +340,7 @@ public final class EntityCapsManager extends Manager { public void processPacket(Stanza packet) { presenceSend = (Presence) packet; } - }, PresenceTypeFilter.AVAILABLE); + }, PresenceTypeFilter.OUTGOING_PRESENCE_BROADCAST); // Intercept presence packages and add caps data when intended. // XEP-0115 specifies that a client SHOULD include entity capabilities