Fixed issue #38, autoboxing of a nullable Integer given a default to 0 assignment

This commit is contained in:
andrea
2015-06-20 12:17:50 +02:00
parent d20940f110
commit 92a76c9de1
7 changed files with 74 additions and 13 deletions
@@ -77,7 +77,7 @@ public interface IMessagesStore {
*/
List<PublishEvent> listMessagesInSession(String clientID);
void removeMessageInSession(String clientID, int packetID);
void removeMessageInSession(String clientID, Integer packetID);
void dropMessagesInSession(String clientID);
@@ -102,10 +102,14 @@ public class MemoryStorageService implements IMessagesStore, ISessionsStore {
}
@Override
public void removeMessageInSession(String clientID, int messageID) {
public void removeMessageInSession(String clientID, Integer messageID) {
List<PublishEvent> events = m_persistentMessageStore.get(clientID);
PublishEvent toRemoveEvt = null;
for (PublishEvent evt : events) {
if (evt.getMessageID() == null && messageID == null) {
//was a qos0 message (no ID)
toRemoveEvt = evt;
}
if (evt.getMessageID() == messageID) {
toRemoveEvt = evt;
}
@@ -208,16 +208,16 @@ class ProtocolProcessor implements EventHandler<ValueEvent> {
if (msg.isPasswordFlag()) {
pwd = msg.getPassword();
} else if (!this.allowAnonymous) {
failedCredetials(session);
failedCredentials(session);
return;
}
if (!m_authenticator.checkValid(msg.getUsername(), pwd)) {
failedCredetials(session);
failedCredentials(session);
return;
}
session.setAttribute(NettyChannel.ATTR_KEY_USERNAME, msg.getUsername());
} else if (!this.allowAnonymous) {
failedCredetials(session);
failedCredentials(session);
return;
}
@@ -246,7 +246,7 @@ class ProtocolProcessor implements EventHandler<ValueEvent> {
}
}
private void failedCredetials(ServerChannel session) {
private void failedCredentials(ServerChannel session) {
ConnAckMessage okResp = new ConnAckMessage();
okResp.setReturnCode(ConnAckMessage.BAD_USERNAME_OR_PASSWORD);
session.write(okResp);
@@ -311,7 +311,7 @@ class ProtocolProcessor implements EventHandler<ValueEvent> {
if (qos == AbstractMessage.QOSType.MOST_ONE) { //QoS0
forward2Subscribers(topic, qos, message, retain, messageID);
} else if (qos == AbstractMessage.QOSType.LEAST_ONE) {
} else if (qos == AbstractMessage.QOSType.LEAST_ONE) { //QoS1
PublishEvent inFlightEvt = new PublishEvent(topic, qos, message, retain,
clientID, messageID);
//TODO use a message store for TO PUBLISH MESSAGES it has nothing to do with inFlight!!
@@ -321,7 +321,7 @@ class ProtocolProcessor implements EventHandler<ValueEvent> {
//NB the PUB_ACK could be sent also after the addInFlight
sendPubAck(new PubAckEvent(messageID, clientID));
LOG.debug("replying with PubAck to MSG ID {}", messageID);
} else if (qos == AbstractMessage.QOSType.EXACTLY_ONCE) {
} else if (qos == AbstractMessage.QOSType.EXACTLY_ONCE) { //QoS2
String publishKey = String.format("%s%d", clientID, messageID);
//store the message in temp store
PublishEvent qos2Persistent = new PublishEvent(topic, qos, message, retain,
@@ -31,7 +31,7 @@ public class PublishEvent extends MessagingEvent {
boolean m_retain;
String m_clientID;
//Optional attribute, available only fo QoS 1 and 2
int m_msgID;
Integer m_msgID;
public PublishEvent(String topic, QOSType qos, ByteBuffer message, boolean retain,
String clientID, Integer msgID) {
@@ -65,7 +65,7 @@ public class PublishEvent extends MessagingEvent {
return m_clientID;
}
public int getMessageID() {
public Integer getMessageID() {
return m_msgID;
}
@@ -32,7 +32,7 @@ public class StoredPublishEvent implements Serializable {
boolean m_retain;
String m_clientID;
//Optional attribute, available only fo QoS 1 and 2
int m_msgID;
Integer m_msgID;
public StoredPublishEvent(PublishEvent wrapped) {
m_topic = wrapped.getTopic();
@@ -67,7 +67,7 @@ public class StoredPublishEvent implements Serializable {
return m_clientID;
}
public int getMessageID() {
public Integer getMessageID() {
return m_msgID;
}
}
@@ -157,13 +157,17 @@ public class MapDBPersistentStore implements IMessagesStore, ISessionsStore {
}
@Override
public void removeMessageInSession(String clientID, int messageID) {
public void removeMessageInSession(String clientID, Integer messageID) {
List<StoredPublishEvent> events = m_persistentMessageStore.get(clientID);
if (events == null) {
return;
}
StoredPublishEvent toRemoveEvt = null;
for (StoredPublishEvent evt : events) {
if (evt.getMessageID() == null && messageID == null) {
//was a qos0 message (no ID)
toRemoveEvt = evt;
}
if (evt.getMessageID() == messageID) {
toRemoveEvt = evt;
}