summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNick Hudson <nick.hudson@isode.com>2014-02-03 20:46:23 (GMT)
committerNick Hudson <nick.hudson@isode.com>2014-02-03 21:54:21 (GMT)
commit535e1a979a164f807aa64bf2df2bb36e7015ff17 (patch)
treebaf2e95bc6f33e99512842cf1ad78c715c45a3c0 /src/com/isode/stroke/queries/Request.java
parent2a1c515b337bde1ad4a95888902cd7c9a8ef1aab (diff)
downloadstroke-535e1a979a164f807aa64bf2df2bb36e7015ff17.zip
stroke-535e1a979a164f807aa64bf2df2bb36e7015ff17.tar.bz2
Check sender on incoming IQ responses
This patch corresponds with the Swiften commit 5f1cb0d768265347bc80862c33f5967f07759b10 whose comment reads Release-Notes: Fixed a bug whereby the sender of an iq wasn't being checked before matching it to a request. Note that since the Swiften change, other modifications have been made to the affected files, and these modifications are not reflected in this patch. Test-information: Code builds. Ran with MLC to make sure things all seem to work OK. Change-Id: Ife96925d4d728bc0fe749d6b5b849fbe4e866315
Diffstat (limited to 'src/com/isode/stroke/queries/Request.java')
-rw-r--r--src/com/isode/stroke/queries/Request.java49
1 files changed, 35 insertions, 14 deletions
diff --git a/src/com/isode/stroke/queries/Request.java b/src/com/isode/stroke/queries/Request.java
index 6a843a1..50645b4 100644
--- a/src/com/isode/stroke/queries/Request.java
+++ b/src/com/isode/stroke/queries/Request.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, Isode Limited, London, England.
+ * Copyright (c) 2010-2014, Isode Limited, London, England.
* All rights reserved.
*/
/*
@@ -67,20 +67,41 @@ public abstract class Request implements IQHandler {
public boolean handleIQ(IQ iq) {
boolean handled = false;
if (sent_ && iq.getID().equals(id_)) {
- if (iq.getType().equals(IQ.Type.Result)) {
- handleResponse(iq.getPayload(payload_), null);
- } else {
- ErrorPayload errorPayload = iq.getPayload(new ErrorPayload());
- if (errorPayload != null) {
- handleResponse(null, errorPayload);
- } else {
- handleResponse(null, new ErrorPayload(ErrorPayload.Condition.UndefinedCondition));
- }
- }
- router_.removeHandler(this);
- handled = true;
- }
+ if (isCorrectSender(iq.getFrom())) {
+
+ if (iq.getType().equals(IQ.Type.Result)) {
+ handleResponse(iq.getPayload(payload_), null);
+ } else {
+ ErrorPayload errorPayload = iq.getPayload(new ErrorPayload());
+ if (errorPayload != null) {
+ handleResponse(null, errorPayload);
+ } else {
+ handleResponse(null, new ErrorPayload(ErrorPayload.Condition.UndefinedCondition));
+ }
+ }
+ router_.removeHandler(this);
+ handled = true;
+ }
+ }
return handled;
}
+ private boolean isCorrectSender(final JID jid) {
+ if (isAccountJID(receiver_)) {
+ return 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;
+ }
+
+ return jid.isValid() ?
+ router_.getJID().compare(jid, JID.CompareType.WithoutResource) == 0 : true;
+ }
+
+
} \ No newline at end of file