Fix EntityCapsManager presenceSend

capturing all outoing presences of type 'available' would also capture
presences not used for presence broadcast, e.g., MUC presences.

This caused the EntityCaps integration test (localEntityCaps) to fail
if the MUC integration test was run before.
This commit is contained in:
Florian Schmaus 2016-12-23 23:35:52 +01:00
parent ca394838f0
commit ecf1ed7f6b
3 changed files with 45 additions and 1 deletions

View File

@ -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();
}
}

View File

@ -35,6 +35,8 @@ public final class PresenceTypeFilter extends FlexibleStanzaTypeFilter<Presence>
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) {

View File

@ -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