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();

Reply via email to