summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--build.xml15
-rw-r--r--src/com/isode/stroke/elements/DiscoInfo.java3
-rw-r--r--src/com/isode/stroke/muc/MUCImpl.java8
-rw-r--r--src/com/isode/stroke/network/Connector.java4
-rw-r--r--src/com/isode/stroke/network/JavaTimer.java47
-rw-r--r--src/com/isode/stroke/presence/PresenceOracle.java10
-rw-r--r--src/com/isode/stroke/queries/requests/EnableCarbonsRequest.java22
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/CarbonsEnableSerializer.java4
9 files changed, 80 insertions, 35 deletions
diff --git a/Makefile b/Makefile
index e642806..b9c4d82 100644
--- a/Makefile
+++ b/Makefile
@@ -20,7 +20,7 @@ FINDBUGS_VERSION=3.0.1
.PHONY : test
test: dist/lib/stroke.jar third-party/cobertura/cobertura.jar third-party/findbugs-$(FINDBUGS_VERSION)/lib/findbugs.jar third-party/pmd/lib/pmd-5.0.0.jar
- ant ${DEFINES} -DJUNIT_JAR=${JUNIT} -Dcobertura-jar=third-party/cobertura/cobertura.jar -Djakarta-oro-jar=third-party/cobertura/lib/jakarta-oro-2.0.8.jar -Dlog4j-jar=third-party/cobertura/lib/log4j-1.2.9.jar -Dasm-jar=third-party/cobertura/lib/asm-3.0.jar -Dasm-tree-jar=third-party/cobertura/lib/asm-tree-3.0.jar -Dicu4j-jar=third-party/icu4j.jar -Dfindbugs.home=third-party/findbugs-$(FINDBUGS_VERSION) -Dpmd.home=third-party/pmd test
+ ant ${DEFINES} -DJUNIT_JAR=${JUNIT} -DHAMCREST_JAR=${HAMCREST} -Dcobertura-jar=third-party/cobertura/cobertura.jar -Djakarta-oro-jar=third-party/cobertura/lib/jakarta-oro-2.0.8.jar -Dlog4j-jar=third-party/cobertura/lib/log4j-1.2.9.jar -Dasm-jar=third-party/cobertura/lib/asm-3.0.jar -Dasm-tree-jar=third-party/cobertura/lib/asm-tree-3.0.jar -Dicu4j-jar=third-party/icu4j.jar -Dfindbugs.home=third-party/findbugs-$(FINDBUGS_VERSION) -Dpmd.home=third-party/pmd test
third-party/aalto/aalto-xml.jar:
mkdir -p third-party/aalto
diff --git a/build.xml b/build.xml
index fe123bb..00f098e 100644
--- a/build.xml
+++ b/build.xml
@@ -117,6 +117,7 @@
<classpath>
<pathelement location="${jar}"/>
<pathelement location="${JUNIT_JAR}"/>
+ <pathelement location="${HAMCREST_JAR}"/>
<fileset dir="${icu4j-dir}" includes="icu4j.jar"/>
</classpath>
</javac>
@@ -143,6 +144,7 @@
</classpath>
<classpath>
<pathelement location="${JUNIT_JAR}"/>
+ <pathelement location="${HAMCREST_JAR}"/>
<pathelement location="${jar}"/>
<pathelement location="${src.tests}"/>
<path refid="classpath"/>
@@ -201,7 +203,7 @@
</pmd>
</target>
- <target name="test" depends="compile-tests, instrument, run-tests, coverage, findbugs, pmd">
+ <target name="test" depends="compile-tests, instrument, run-tests, coverage, findbugs, pmd, report-junit-tests">
</target>
<target name="clean"
@@ -243,4 +245,15 @@
</classpath>
</java>
</target>
+
+ <target name="report-junit-tests" depends="run-tests">
+ <mkdir dir="${test.results}/html"/>
+ <junitreport todir="${test.results}">
+ <fileset dir="${test.results}">
+ <include name="TEST-*.xml"/>
+ </fileset>
+ <report todir="${test.results}/html"/>
+ </junitreport>
+ </target>
+
</project>
diff --git a/src/com/isode/stroke/elements/DiscoInfo.java b/src/com/isode/stroke/elements/DiscoInfo.java
index 78e43ff..83a36b4 100644
--- a/src/com/isode/stroke/elements/DiscoInfo.java
+++ b/src/com/isode/stroke/elements/DiscoInfo.java
@@ -3,7 +3,7 @@
* All rights reserved.
*/
/*
- * Copyright (c) 2010-2016, Isode Limited, London, England.
+ * Copyright (c) 2010-2017, Isode Limited, London, England.
* All rights reserved.
*/
package com.isode.stroke.elements;
@@ -34,6 +34,7 @@ public class DiscoInfo extends Payload {
public static final String Bytestream = "http://jabber.org/protocol/bytestreams";
public static final String MessageDeliveryReceiptsFeature = "urn:xmpp:receipts";
public static final String WhiteboardFeature = "http://swift.im/whiteboard";
+ public static final String MessageCarbonsFeature = "urn:xmpp:carbons:2";
public static class Identity implements Comparable<Identity> {
private final String name_;
diff --git a/src/com/isode/stroke/muc/MUCImpl.java b/src/com/isode/stroke/muc/MUCImpl.java
index 26be309..2a45926 100644
--- a/src/com/isode/stroke/muc/MUCImpl.java
+++ b/src/com/isode/stroke/muc/MUCImpl.java
@@ -106,7 +106,9 @@ public class MUCImpl extends MUC {
/**
* Change the affiliation of the given Jabber ID.
* It must be called with the real JID, not the room JID.
- * @param jid real jabber ID, not null
+ * @param jid real jabber ID, not null. NOTE: This method does not
+ strip any resource from the JID, as expected by XEP-0045. Callers
+ wanting to be strictly XEP-0045 conformant should pass in a bare JID
* @param affiliation new affiliation, not null
*/
@Override
@@ -114,7 +116,9 @@ public class MUCImpl extends MUC {
final MUCAdminPayload mucPayload = new MUCAdminPayload();
MUCItem item = new MUCItem();
item.affiliation = affiliation;
- item.realJID = jid.toBare();
+ // According to XEP-0045 the JID should be bare, but this isn't being done here because
+ // to provide support for applications where we do want to set affilations on a per resource basis
+ item.realJID = jid;
mucPayload.addItem(item);
GenericRequest<MUCAdminPayload> request = new GenericRequest<MUCAdminPayload>(
IQ.Type.Set, getJID(), mucPayload, iqRouter_);
diff --git a/src/com/isode/stroke/network/Connector.java b/src/com/isode/stroke/network/Connector.java
index 2823679..73a478b 100644
--- a/src/com/isode/stroke/network/Connector.java
+++ b/src/com/isode/stroke/network/Connector.java
@@ -218,9 +218,9 @@ public class Connector {
addressQuery.onResult.disconnectAll();
addressQuery = null;
}
- if (currentConnection != null) {
+ if (currentConnectionConnectFinishedConnection != null) {
currentConnectionConnectFinishedConnection.disconnect();
- currentConnection = null;
+ currentConnectionConnectFinishedConnection = null;
}
onConnectFinished.emit(connection, (connection != null || foundSomeDNS) ? null : new DomainNameResolveError());
diff --git a/src/com/isode/stroke/network/JavaTimer.java b/src/com/isode/stroke/network/JavaTimer.java
index ac9e219..2baae3d 100644
--- a/src/com/isode/stroke/network/JavaTimer.java
+++ b/src/com/isode/stroke/network/JavaTimer.java
@@ -4,21 +4,20 @@
* See Documentation/Licenses/GPLv3.txt for more information.
*/
/*
- * Copyright (c) 2010, Isode Limited, London, England.
+ * Copyright (c) 2010-2018, Isode Limited, London, England.
* All rights reserved.
*/
package com.isode.stroke.network;
-import java.util.Date;
-
import com.isode.stroke.eventloop.Event;
import com.isode.stroke.eventloop.EventLoop;
+import com.isode.stroke.eventloop.EventOwner;
class JavaTimer extends Timer {
- private class TimerRunnable implements Runnable {
+ private class TimerRunnable implements Runnable,EventOwner {
- boolean running_ = true;
+ private boolean running_ = true;
private final EventLoop eventLoop_;
private final long milliseconds_;
@@ -28,25 +27,27 @@ class JavaTimer extends Timer {
}
public void run() {
- long endTime = new Date().getTime() + milliseconds_;
- while (shouldEmit() && new Date().getTime() < endTime) {
+ long endTime = System.currentTimeMillis() + milliseconds_;
+ while (shouldEmit() && System.currentTimeMillis() < endTime) {
try {
- long timeToWait = endTime - new Date().getTime();
+ long timeToWait = endTime - System.currentTimeMillis();
if (timeToWait > 0) {
- Thread.sleep(milliseconds_);
+ Thread.sleep(timeToWait);
}
} catch (InterruptedException ex) {
// Needs to be caught, but won't break out of the loop
// unless end time reached or stop() has been called.
}
- }
- if (shouldEmit()) {
- eventLoop_.postEvent(new Event.Callback() {
- public void run() {
- onTick.emit();
- }
- });
- }
+ }
+ synchronized(this) {
+ if (shouldEmit()) {
+ eventLoop_.postEvent(new Event.Callback() {
+ public void run() {
+ onTick.emit();
+ }
+ },this);
+ }
+ }
}
@@ -56,6 +57,7 @@ class JavaTimer extends Timer {
public synchronized void stop() {
running_ = false;
+ timer_.eventLoop_.removeEventsFromOwner(this);
}
}
@@ -85,14 +87,15 @@ class JavaTimer extends Timer {
@Override
public void stop() {
timer_.stop();
- //FIXME: This needs to clear any remaining events out of the EventLoop queue.
}
-
+
@Override
public String toString() {
- return "JavaTimer for " + timer_.milliseconds_ +
- " milliseconds " +
- (timer_.running_ ? "running" : "not running");
+ synchronized (timer_) {
+ return "JavaTimer for " + timer_.milliseconds_ +
+ " milliseconds " +
+ (timer_.running_ ? "running" : "not running");
+ }
}
private final TimerRunnable timer_;
}
diff --git a/src/com/isode/stroke/presence/PresenceOracle.java b/src/com/isode/stroke/presence/PresenceOracle.java
index e983d51..f1710a6 100644
--- a/src/com/isode/stroke/presence/PresenceOracle.java
+++ b/src/com/isode/stroke/presence/PresenceOracle.java
@@ -199,10 +199,14 @@ public class PresenceOracle {
* @return The relevant presence.
*/
public static Presence getActivePresence(Collection<? extends Presence> presences) {
+
+ PresenceAccountCmp comparator = new PresenceAccountCmp();
+ int size = presences.size();
+ if (size < 1) size = 1;
- PriorityQueue<Presence> online = new PriorityQueue<Presence>(presences.size(),new PresenceAccountCmp());
- PriorityQueue<Presence> away = new PriorityQueue<Presence>(presences.size(),new PresenceAccountCmp());
- PriorityQueue<Presence> offline = new PriorityQueue<Presence>(presences.size(),new PresenceAccountCmp());
+ PriorityQueue<Presence> online = new PriorityQueue<Presence>(size, comparator);
+ PriorityQueue<Presence> away = new PriorityQueue<Presence>(size, comparator);
+ PriorityQueue<Presence> offline = new PriorityQueue<Presence>(size, comparator);
for (Presence presence : presences) {
switch (presence.getShow()) {
diff --git a/src/com/isode/stroke/queries/requests/EnableCarbonsRequest.java b/src/com/isode/stroke/queries/requests/EnableCarbonsRequest.java
new file mode 100644
index 0000000..cbc8109
--- /dev/null
+++ b/src/com/isode/stroke/queries/requests/EnableCarbonsRequest.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2016-2017, Isode Limited, London, England.
+ * All rights reserved.
+ */
+package com.isode.stroke.queries.requests;
+
+import com.isode.stroke.elements.CarbonsEnable;
+import com.isode.stroke.elements.IQ;
+import com.isode.stroke.jid.JID;
+import com.isode.stroke.queries.GenericRequest;
+import com.isode.stroke.queries.IQRouter;
+
+public class EnableCarbonsRequest extends GenericRequest<CarbonsEnable> {
+
+ public EnableCarbonsRequest(IQRouter router) {
+ super(IQ.Type.Set, new JID(), new CarbonsEnable(), router);
+ }
+
+ public static EnableCarbonsRequest create(IQRouter router) {
+ return new EnableCarbonsRequest(router);
+ }
+} \ No newline at end of file
diff --git a/src/com/isode/stroke/serializer/payloadserializers/CarbonsEnableSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/CarbonsEnableSerializer.java
index f88e461..10c483a 100644
--- a/src/com/isode/stroke/serializer/payloadserializers/CarbonsEnableSerializer.java
+++ b/src/com/isode/stroke/serializer/payloadserializers/CarbonsEnableSerializer.java
@@ -11,11 +11,9 @@
package com.isode.stroke.serializer.payloadserializers;
+import com.isode.stroke.elements.CarbonsEnable;
import com.isode.stroke.serializer.GenericPayloadSerializer;
-import com.isode.stroke.serializer.xml.XMLTextNode;
import com.isode.stroke.serializer.xml.XMLElement;
-import com.isode.stroke.elements.CarbonsEnable;
-import com.isode.stroke.base.NotNull;
public class CarbonsEnableSerializer extends GenericPayloadSerializer<CarbonsEnable> {