mirror of
https://codeberg.org/Mercury-IM/Smack
synced 2024-11-22 14:22:05 +01:00
Add UnknownIqRequestReplyMode
This commit is contained in:
parent
5aab471d64
commit
dcf7406fa4
2 changed files with 56 additions and 7 deletions
|
@ -41,6 +41,7 @@ import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
import org.jivesoftware.smack.ConnectionConfiguration.SecurityMode;
|
import org.jivesoftware.smack.ConnectionConfiguration.SecurityMode;
|
||||||
|
import org.jivesoftware.smack.SmackConfiguration.UnknownIqRequestReplyMode;
|
||||||
import org.jivesoftware.smack.SmackException.AlreadyConnectedException;
|
import org.jivesoftware.smack.SmackException.AlreadyConnectedException;
|
||||||
import org.jivesoftware.smack.SmackException.AlreadyLoggedInException;
|
import org.jivesoftware.smack.SmackException.AlreadyLoggedInException;
|
||||||
import org.jivesoftware.smack.SmackException.NoResponseException;
|
import org.jivesoftware.smack.SmackException.NoResponseException;
|
||||||
|
@ -991,20 +992,31 @@ public abstract class AbstractXMPPConnection implements XMPPConnection {
|
||||||
replyTimeout = timeout;
|
replyTimeout = timeout;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean replyToUnknownIqDefault = true;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the default value used to determine if new connection will reply to unknown IQ requests. The pre-configured
|
* Set the default value used to determine if new connection will reply to unknown IQ requests. The pre-configured
|
||||||
* default is 'true'.
|
* default is 'true'.
|
||||||
*
|
*
|
||||||
* @param replyToUnkownIqDefault
|
* @param replyToUnkownIqDefault
|
||||||
* @see #setReplyToUnknownIq(boolean)
|
* @see #setReplyToUnknownIq(boolean)
|
||||||
|
* @deprecated Use {@link SmackConfiguration#setUnknownIqRequestReplyMode(org.jivesoftware.smack.SmackConfiguration.UnknownIqRequestReplyMode)} instead.
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
|
// TODO Remove in Smack 4.3
|
||||||
public static void setReplyToUnknownIqDefault(boolean replyToUnkownIqDefault) {
|
public static void setReplyToUnknownIqDefault(boolean replyToUnkownIqDefault) {
|
||||||
AbstractXMPPConnection.replyToUnknownIqDefault = replyToUnkownIqDefault;
|
SmackConfiguration.UnknownIqRequestReplyMode mode;
|
||||||
|
if (replyToUnkownIqDefault) {
|
||||||
|
mode = SmackConfiguration.UnknownIqRequestReplyMode.replyServiceUnavailable;
|
||||||
|
} else {
|
||||||
|
mode = SmackConfiguration.UnknownIqRequestReplyMode.doNotReply;
|
||||||
|
}
|
||||||
|
SmackConfiguration.setUnknownIqRequestReplyMode(mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean replyToUnkownIq = replyToUnknownIqDefault;
|
private SmackConfiguration.UnknownIqRequestReplyMode unknownIqRequestReplyMode = SmackConfiguration.getUnknownIqRequestReplyMode();
|
||||||
|
|
||||||
|
public void setUnknownIqRequestReplyMode(UnknownIqRequestReplyMode unknownIqRequestReplyMode) {
|
||||||
|
this.unknownIqRequestReplyMode = Objects.requireNonNull(unknownIqRequestReplyMode, "Mode must not be null");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set if Smack will automatically send
|
* Set if Smack will automatically send
|
||||||
|
@ -1012,9 +1024,18 @@ public abstract class AbstractXMPPConnection implements XMPPConnection {
|
||||||
* registered {@link IQRequestHandler} is received.
|
* registered {@link IQRequestHandler} is received.
|
||||||
*
|
*
|
||||||
* @param replyToUnknownIq
|
* @param replyToUnknownIq
|
||||||
|
* @deprecated use {@link #setUnknownIqRequestReplyMode(UnknownIqRequestReplyMode)} instead.
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
|
// TODO Remove in Smack 4.3
|
||||||
public void setReplyToUnknownIq(boolean replyToUnknownIq) {
|
public void setReplyToUnknownIq(boolean replyToUnknownIq) {
|
||||||
this.replyToUnkownIq = replyToUnknownIq;
|
SmackConfiguration.UnknownIqRequestReplyMode mode;
|
||||||
|
if (replyToUnknownIq) {
|
||||||
|
mode = SmackConfiguration.UnknownIqRequestReplyMode.replyServiceUnavailable;
|
||||||
|
} else {
|
||||||
|
mode = SmackConfiguration.UnknownIqRequestReplyMode.doNotReply;
|
||||||
|
}
|
||||||
|
unknownIqRequestReplyMode = mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void parseAndProcessStanza(XmlPullParser parser) throws Exception {
|
protected void parseAndProcessStanza(XmlPullParser parser) throws Exception {
|
||||||
|
@ -1089,13 +1110,24 @@ public abstract class AbstractXMPPConnection implements XMPPConnection {
|
||||||
throw new IllegalStateException("Should only encounter IQ type 'get' or 'set'");
|
throw new IllegalStateException("Should only encounter IQ type 'get' or 'set'");
|
||||||
}
|
}
|
||||||
if (iqRequestHandler == null) {
|
if (iqRequestHandler == null) {
|
||||||
if (!replyToUnkownIq) {
|
XMPPError.Condition replyCondition;
|
||||||
|
switch (unknownIqRequestReplyMode) {
|
||||||
|
case doNotReply:
|
||||||
return;
|
return;
|
||||||
|
case replyFeatureNotImplemented:
|
||||||
|
replyCondition = XMPPError.Condition.feature_not_implemented;
|
||||||
|
break;
|
||||||
|
case replyServiceUnavailable:
|
||||||
|
replyCondition = XMPPError.Condition.service_unavailable;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new AssertionError();
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the IQ stanza is of type "get" or "set" with no registered IQ request handler, then answer an
|
// If the IQ stanza is of type "get" or "set" with no registered IQ request handler, then answer an
|
||||||
// IQ of type 'error' with condition 'service-unavailable'.
|
// IQ of type 'error' with condition 'service-unavailable'.
|
||||||
ErrorIQ errorIQ = IQ.createErrorResponse(iq, XMPPError.getBuilder((
|
ErrorIQ errorIQ = IQ.createErrorResponse(iq, XMPPError.getBuilder((
|
||||||
XMPPError.Condition.service_unavailable)));
|
replyCondition)));
|
||||||
try {
|
try {
|
||||||
sendStanza(errorIQ);
|
sendStanza(errorIQ);
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,6 +34,7 @@ import org.jivesoftware.smack.debugger.SmackDebugger;
|
||||||
import org.jivesoftware.smack.debugger.SmackDebuggerFactory;
|
import org.jivesoftware.smack.debugger.SmackDebuggerFactory;
|
||||||
import org.jivesoftware.smack.parsing.ExceptionThrowingCallback;
|
import org.jivesoftware.smack.parsing.ExceptionThrowingCallback;
|
||||||
import org.jivesoftware.smack.parsing.ParsingExceptionCallback;
|
import org.jivesoftware.smack.parsing.ParsingExceptionCallback;
|
||||||
|
import org.jivesoftware.smack.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents the configuration of Smack. The configuration is used for:
|
* Represents the configuration of Smack. The configuration is used for:
|
||||||
|
@ -370,4 +371,20 @@ public final class SmackConfiguration {
|
||||||
return defaultHostnameVerififer;
|
return defaultHostnameVerififer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum UnknownIqRequestReplyMode {
|
||||||
|
doNotReply,
|
||||||
|
replyFeatureNotImplemented,
|
||||||
|
replyServiceUnavailable,
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO Change to replyFeatureNotImplemented in Smack 4.3
|
||||||
|
private static UnknownIqRequestReplyMode unknownIqRequestReplyMode = UnknownIqRequestReplyMode.replyServiceUnavailable;
|
||||||
|
|
||||||
|
public static UnknownIqRequestReplyMode getUnknownIqRequestReplyMode() {
|
||||||
|
return unknownIqRequestReplyMode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setUnknownIqRequestReplyMode(UnknownIqRequestReplyMode unknownIqRequestReplyMode) {
|
||||||
|
SmackConfiguration.unknownIqRequestReplyMode = Objects.requireNonNull(unknownIqRequestReplyMode, "Must set mode");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue