summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTarun Gupta <tarun1995gupta@gmail.com>2015-07-08 00:28:50 (GMT)
committerNick Hudson <nick.hudson@isode.com>2015-07-22 14:40:56 (GMT)
commit7f96c8b224099f1c0e5c6996984fe79558e0d550 (patch)
treee9b3c600b370ffad139b05b84447aa5c6e3d9e78 /src/com/isode/stroke/queries/Request.java
parent1f2c3add9971e8636013c384938456388b04ed79 (diff)
downloadstroke-7f96c8b224099f1c0e5c6996984fe79558e0d550.zip
stroke-7f96c8b224099f1c0e5c6996984fe79558e0d550.tar.bz2
Update Queries.
Updates RawXMLPayload Element, SoftwareVersion Element. Updates IQRouter, Request, Responder, SoftwareVersionResponder. Updates ErrorSerilaizer access. Adds RawRequest, GetInBandRegistrationFormRequest, GetSoftwareVersionRequest, and SetInBandRegistrationRequest. License: This patch is BSD-licensed, see Documentation/Licenses/BSD-simplified.txt for details. Test-Information: Tests added for: IQRouter, Request and Responder. Rest, all tests passes. Change-Id: I22308cc05bd1a6c28f3937a44d997e1da47e2891
Diffstat (limited to 'src/com/isode/stroke/queries/Request.java')
-rw-r--r--src/com/isode/stroke/queries/Request.java40
1 files changed, 21 insertions, 19 deletions
diff --git a/src/com/isode/stroke/queries/Request.java b/src/com/isode/stroke/queries/Request.java
index 52e3854..c5c9999 100644
--- a/src/com/isode/stroke/queries/Request.java
+++ b/src/com/isode/stroke/queries/Request.java
@@ -13,6 +13,7 @@ import com.isode.stroke.elements.ErrorPayload;
import com.isode.stroke.elements.IQ;
import com.isode.stroke.elements.IQ.Type;
import com.isode.stroke.elements.Payload;
+import com.isode.stroke.elements.RawXMLPayload;
import com.isode.stroke.jid.JID;
import java.util.logging.Logger;
@@ -20,13 +21,13 @@ import java.util.logging.Logger;
* Base class for IQ requests.
*/
public abstract class Request implements IQHandler {
- protected final Type type_;
- protected final IQRouter router_;
- protected final JID receiver_;
- protected final JID sender_;
+ protected Type type_;
+ protected IQRouter router_;
+ protected JID receiver_ = new JID();
+ protected JID sender_ = new JID();
private boolean sent_;
private Payload payload_;
- private String id_;
+ private String id_ = "";
private Logger logger_ = Logger.getLogger(this.getClass().getName());
/**
@@ -99,11 +100,15 @@ public abstract class Request implements IQHandler {
if (isCorrectSender(iq.getFrom())) {
if (iq.getType().equals(IQ.Type.Result)) {
- handleResponse(iq.getPayload(payload_), null);
+ Payload payload = iq.getPayload(payload_);
+ if (payload == null && (payload_ instanceof RawXMLPayload) && !iq.getPayloads().isEmpty()) {
+ payload = iq.getPayloads().firstElement();
+ }
+ handleResponse(payload, null);
} else {
ErrorPayload errorPayload = iq.getPayload(new ErrorPayload());
if (errorPayload != null) {
- handleResponse(null, errorPayload);
+ handleResponse(null, errorPayload);
} else {
handleResponse(null, new ErrorPayload(ErrorPayload.Condition.UndefinedCondition));
}
@@ -117,20 +122,17 @@ public abstract class Request implements IQHandler {
}
private boolean isCorrectSender(final JID jid) {
- if (isAccountJID(receiver_)) {
- return isAccountJID(jid);
+ if (router_.isAccountJID(receiver_)) {
+ if (jid.isValid() && jid.compare(router_.getJID(), JID.CompareType.WithResource) == 0) {
+ // This unspecified behavior seems to happen in ejabberd versions (e.g. 2.0.5)
+ logger_.warning("Server responded to an account request with a full JID, which is not allowed. Handling it anyway.");
+ return true;
+ }
+ return router_.isAccountJID(jid);
}
- return (jid.compare(receiver_, JID.CompareType.WithResource) == 0);
- }
-
- private boolean isAccountJID(final JID jid) {
- // If the router's JID is not set, we don't check anything
- if (!router_.getJID().isValid()) {
- return true;
+ else {
+ return jid.compare(receiver_, JID.CompareType.WithResource) == 0;
}
-
- return jid.isValid() ?
- router_.getJID().compare(jid, JID.CompareType.WithoutResource) == 0 : true;
}
public JID getReceiver() {