Assure intercept methods to not change the message

This was done by cloning.
This commit is contained in:
Wagner Macedo
2015-08-02 09:34:12 -03:00
parent 66ce5b6e0e
commit 58f6191a8e
4 changed files with 31 additions and 4 deletions
@@ -35,7 +35,7 @@ final class BrokerInterceptor implements Interceptor {
@Override
public void notifyClientConnected(final ConnectMessage msg) {
handler.onConnect(msg);
handler.onConnect(msg.readOnlyClone());
}
@Override
@@ -45,16 +45,16 @@ final class BrokerInterceptor implements Interceptor {
@Override
public void notifyTopicPublished(final PublishMessage msg) {
handler.onPublish(msg);
handler.onPublish(msg.readOnlyClone());
}
@Override
public void notifyTopicSubscribed(final Subscription sub) {
handler.onSubscribe(sub);
handler.onSubscribe(sub.clone());
}
@Override
public void notifyTopicUnsubscribed(final Subscription sub) {
handler.onUnsubscribe(sub);
handler.onUnsubscribe(sub.clone());
}
}
@@ -106,4 +106,13 @@ public class Subscription implements Serializable {
public String toString() {
return String.format("[filter:%s, cliID: %s, qos: %s, active: %s]", this.topicFilter, this.clientId, this.requestedQos, this.active);
}
@Override
public Subscription clone() {
try {
return (Subscription) super.clone();
} catch (CloneNotSupportedException e) {
return null;
}
}
}
@@ -164,4 +164,12 @@ public class ConnectMessage extends AbstractMessage {
}
return base;
}
public ConnectMessage readOnlyClone() {
try {
return (ConnectMessage) super.clone();
} catch (CloneNotSupportedException e) {
return null;
}
}
}
@@ -54,4 +54,14 @@ public class PublishMessage extends MessageIDMessage {
public void setPayload(ByteBuffer payload) {
this.m_payload = payload;
}
public PublishMessage readOnlyClone() {
try {
final PublishMessage clone = (PublishMessage) super.clone();
clone.m_payload = this.m_payload.asReadOnlyBuffer();
return clone;
} catch (CloneNotSupportedException e) {
return null;
}
}
}