diff options
Diffstat (limited to 'src/com/isode/stroke')
5 files changed, 56 insertions, 28 deletions
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/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/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> { |