Repository: activemq-apollo Updated Branches: refs/heads/trunk 2b3b5ccb9 -> d439ba558
Allow MQTT 3.1.1 clients to connect. Project: http://git-wip-us.apache.org/repos/asf/activemq-apollo/repo Commit: http://git-wip-us.apache.org/repos/asf/activemq-apollo/commit/d439ba55 Tree: http://git-wip-us.apache.org/repos/asf/activemq-apollo/tree/d439ba55 Diff: http://git-wip-us.apache.org/repos/asf/activemq-apollo/diff/d439ba55 Branch: refs/heads/trunk Commit: d439ba558b9036e3a6ac87254b1dd034f5d06530 Parents: 2b3b5cc Author: Hiram Chirino <[email protected]> Authored: Thu Feb 20 09:47:57 2014 -0500 Committer: Hiram Chirino <[email protected]> Committed: Thu Feb 20 09:47:57 2014 -0500 ---------------------------------------------------------------------- .../activemq/apollo/mqtt/MqttProtocolCodecFactory.java | 8 ++++++-- .../activemq/apollo/mqtt/MqttProtocolHandler.java | 12 +++++++++--- 2 files changed, 15 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/activemq-apollo/blob/d439ba55/apollo-mqtt/src/main/java/org/apache/activemq/apollo/mqtt/MqttProtocolCodecFactory.java ---------------------------------------------------------------------- diff --git a/apollo-mqtt/src/main/java/org/apache/activemq/apollo/mqtt/MqttProtocolCodecFactory.java b/apollo-mqtt/src/main/java/org/apache/activemq/apollo/mqtt/MqttProtocolCodecFactory.java index a164c40..ffaebe5 100644 --- a/apollo-mqtt/src/main/java/org/apache/activemq/apollo/mqtt/MqttProtocolCodecFactory.java +++ b/apollo-mqtt/src/main/java/org/apache/activemq/apollo/mqtt/MqttProtocolCodecFactory.java @@ -39,7 +39,8 @@ public class MqttProtocolCodecFactory implements ProtocolCodecFactory.Provider { // static final String id = "mqtt"; static final Buffer HEAD_MAGIC = new Buffer(new byte []{ 0x10 }); - static final Buffer TAIL_MAGIC = new Buffer(new byte []{ 0x00, 0x06, 'M', 'Q', 'I', 's', 'd', 'p'}); + static final Buffer MQTT31_TAIL_MAGIC = new Buffer(new byte []{ 0x00, 0x06, 'M', 'Q', 'I', 's', 'd', 'p'}); + static final Buffer MQTT311_TAIL_MAGIC = new Buffer(new byte []{ 0x00, 0x04, 'M', 'Q', 'T', 'T'}); @Override public String id() { @@ -68,7 +69,10 @@ public class MqttProtocolCodecFactory implements ProtocolCodecFactory.Provider { if (header.length < 10) { return false; } else { - return header.startsWith(HEAD_MAGIC) && header.indexOf(TAIL_MAGIC, 2) < 6; + return header.startsWith(HEAD_MAGIC) && ( + header.indexOf(MQTT31_TAIL_MAGIC, 2) < 6 || + header.indexOf(MQTT311_TAIL_MAGIC, 2) < 6 + ); } } http://git-wip-us.apache.org/repos/asf/activemq-apollo/blob/d439ba55/apollo-mqtt/src/main/java/org/apache/activemq/apollo/mqtt/MqttProtocolHandler.java ---------------------------------------------------------------------- diff --git a/apollo-mqtt/src/main/java/org/apache/activemq/apollo/mqtt/MqttProtocolHandler.java b/apollo-mqtt/src/main/java/org/apache/activemq/apollo/mqtt/MqttProtocolHandler.java index e9714be..58ec899 100644 --- a/apollo-mqtt/src/main/java/org/apache/activemq/apollo/mqtt/MqttProtocolHandler.java +++ b/apollo-mqtt/src/main/java/org/apache/activemq/apollo/mqtt/MqttProtocolHandler.java @@ -426,9 +426,15 @@ public class MqttProtocolHandler extends AbstractProtocolHandler { final CONNACK connack = new CONNACK(); - if (connect_message.version() != 3) { - connack.code(CONNACK.Code.CONNECTION_REFUSED_UNACCEPTED_PROTOCOL_VERSION); - die(connack, "Unsupported protocol version: " + connect_message.version()); + switch(connect_message.version()) { + case 3:case 4: break; + default: + connack.code(CONNACK.Code.CONNECTION_REFUSED_UNACCEPTED_PROTOCOL_VERSION); + die(connack, "Unsupported protocol version: " + connect_message.version()); + } + + if( (connect_message.clientId() == null || connect_message.clientId().length==0) && !connect_message.cleanSession() ) { + die(connack, "A clean session must be requested when no client id is provided."); } UTF8Buffer client_id = connect_message.clientId();
