diff --git a/smack-core/src/main/java/org/jivesoftware/smack/filter/IQReplyFilter.java b/smack-core/src/main/java/org/jivesoftware/smack/filter/IQReplyFilter.java index 1c3ec64f6..703c40b68 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/filter/IQReplyFilter.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/filter/IQReplyFilter.java @@ -81,6 +81,9 @@ public class IQReplyFilter implements PacketFilter { * @param iqPacket An IQ request. Filter for replies to this packet. */ public IQReplyFilter(IQ iqPacket, XMPPConnection conn) { + if (!iqPacket.isRequestIQ()) { + throw new IllegalArgumentException("IQ must be a request IQ, i.e. of type 'get' or 'set'."); + } if (iqPacket.getTo() != null) { to = iqPacket.getTo().toLowerCase(Locale.US); } else { diff --git a/smack-core/src/main/java/org/jivesoftware/smack/packet/IQ.java b/smack-core/src/main/java/org/jivesoftware/smack/packet/IQ.java index 070c9eb09..1dacac6a2 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/packet/IQ.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/packet/IQ.java @@ -90,6 +90,22 @@ public abstract class IQ extends Packet { this.type = type; } + /** + * Return true if this IQ is a request IQ, i.e. an IQ of type {@link Type#get} or {@link Type#set}. + * + * @return true if IQ type is 'get' or 'set', false otherwise. + * @since 4.1 + */ + public boolean isRequestIQ() { + switch (type) { + case get: + case set: + return true; + default: + return false; + } + } + public final String getChildElementName() { return childElementName; }