You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2013/11/26 00:38:37 UTC

svn commit: r1545459 - in /activemq/activemq-dotnet/Apache.NMS.MQTT/trunk/src/main/csharp: Commands/Header.cs Connection.cs Protocol/MQTTExceptionFactory.cs Transport/ErrorResponse.cs Transport/Response.cs

Author: tabish
Date: Mon Nov 25 23:38:36 2013
New Revision: 1545459

URL: http://svn.apache.org/r1545459
Log:
https://issues.apache.org/jira/browse/AMQNET-458

Implementation

Added:
    activemq/activemq-dotnet/Apache.NMS.MQTT/trunk/src/main/csharp/Commands/Header.cs   (with props)
    activemq/activemq-dotnet/Apache.NMS.MQTT/trunk/src/main/csharp/Protocol/MQTTExceptionFactory.cs   (with props)
    activemq/activemq-dotnet/Apache.NMS.MQTT/trunk/src/main/csharp/Transport/ErrorResponse.cs   (with props)
Modified:
    activemq/activemq-dotnet/Apache.NMS.MQTT/trunk/src/main/csharp/Connection.cs
    activemq/activemq-dotnet/Apache.NMS.MQTT/trunk/src/main/csharp/Transport/Response.cs

Added: activemq/activemq-dotnet/Apache.NMS.MQTT/trunk/src/main/csharp/Commands/Header.cs
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.MQTT/trunk/src/main/csharp/Commands/Header.cs?rev=1545459&view=auto
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.MQTT/trunk/src/main/csharp/Commands/Header.cs (added)
+++ activemq/activemq-dotnet/Apache.NMS.MQTT/trunk/src/main/csharp/Commands/Header.cs Mon Nov 25 23:38:36 2013
@@ -0,0 +1,82 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+using System;
+
+namespace vs2008mqtt
+{
+	public class Header
+	{
+		private byte value;
+
+		public Header(byte value)
+		{
+		}
+
+		public int Type
+		{
+			get { return (this.value & 0x0F) >> 4; }
+			set
+			{
+				this.value &= 0xF0;
+				this.value |= (byte)((value << 4) & 0x0F);
+			}
+		}
+
+		public int QoS
+		{
+			get { return (this.value & 0x06) >> 1; }
+			set
+			{
+				this.value &= 0x06;
+				this.value |= (byte)((value << 1) & 0x06);
+			}
+		}
+
+		public bool Dup
+		{
+			get { return (this.value & 0x80) > 0; }
+			set
+			{
+				if (value)
+				{
+					this.value |= 0x08;
+				}
+				else
+				{
+					this.value &= 0xF7;
+				}
+			}
+		}
+
+		public bool Retain
+		{
+			get { return (this.value & 0x01) > 0; }
+			set
+			{
+				if(value)
+				{
+					this.value |= 0x01;
+				}
+				else
+				{
+					this.value &= 0xFE;
+				}
+			}
+		}
+	}
+}
+

Propchange: activemq/activemq-dotnet/Apache.NMS.MQTT/trunk/src/main/csharp/Commands/Header.cs
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: activemq/activemq-dotnet/Apache.NMS.MQTT/trunk/src/main/csharp/Connection.cs
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.MQTT/trunk/src/main/csharp/Connection.cs?rev=1545459&r1=1545458&r2=1545459&view=diff
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.MQTT/trunk/src/main/csharp/Connection.cs (original)
+++ activemq/activemq-dotnet/Apache.NMS.MQTT/trunk/src/main/csharp/Connection.cs Mon Nov 25 23:38:36 2013
@@ -547,18 +547,15 @@ namespace Apache.NMS.MQTT
 										}
 										else
 										{
-											// TODO figure out correct error to throw.
-//											NMSException exception = CreateExceptionFromBrokerError(error.Exception);
-//											if(exception is InvalidClientIDException)
-//											{
-//												// This is non-recoverable.
-//												// Shutdown the transport connection, and re-create it, but don't start it.
-//												// It will be started if the connection is re-attempted.
-//												this.transport.Stop();
-//												ITransport newTransport = TransportFactory.CreateTransport(this.brokerUri);
-//												SetTransport(newTransport);
-//												throw exception;
-//											}
+											ErrorResponse error = response as ErrorResponse;
+											NMSException exception = error.Error;
+											// This is non-recoverable.
+											// Shutdown the transport connection, and re-create it, but don't start it.
+											// It will be started if the connection is re-attempted.
+											this.transport.Stop();
+											ITransport newTransport = TransportFactory.CreateTransport(this.brokerUri);
+											SetTransport(newTransport);
+											throw exception;
 										}
 									}
 								}

Added: activemq/activemq-dotnet/Apache.NMS.MQTT/trunk/src/main/csharp/Protocol/MQTTExceptionFactory.cs
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.MQTT/trunk/src/main/csharp/Protocol/MQTTExceptionFactory.cs?rev=1545459&view=auto
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.MQTT/trunk/src/main/csharp/Protocol/MQTTExceptionFactory.cs (added)
+++ activemq/activemq-dotnet/Apache.NMS.MQTT/trunk/src/main/csharp/Protocol/MQTTExceptionFactory.cs Mon Nov 25 23:38:36 2013
@@ -0,0 +1,62 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+using System;
+
+using Apache.NMS;
+
+namespace Apache.NMS.MQTT.Protocol
+{
+	public class MQTTExceptionFactory
+	{
+		private MQTTExceptionFactory ()
+		{
+		}
+
+		static NMSException CreateConnectionException(short errorCode)
+		{
+			NMSException result = null;
+
+			if (errorCode == 1)
+			{
+				result = new NMSException("Invalid MQTT Protocol Version specified");
+			}
+			else if(errorCode == 2)
+			{
+				result = new InvalidClientIDException("Client ID not accepted by Broker");
+			}
+			else if(errorCode == 3)
+			{
+				result = new InvalidClientIDException("Server is Unavailable");
+			}
+			else if(errorCode == 4)
+			{
+				result = new NMSSecurityException("Bad user anem or password provided.");
+			}
+			else if(errorCode == 5)
+			{
+				result = new NMSSecurityException("User is not Authorized.");
+			}
+			else
+			{
+				result = new NMSException("Received unknown error code.");
+			}
+
+			return result;
+		}
+	}
+}
+

Propchange: activemq/activemq-dotnet/Apache.NMS.MQTT/trunk/src/main/csharp/Protocol/MQTTExceptionFactory.cs
------------------------------------------------------------------------------
    svn:eol-style = native

Added: activemq/activemq-dotnet/Apache.NMS.MQTT/trunk/src/main/csharp/Transport/ErrorResponse.cs
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.MQTT/trunk/src/main/csharp/Transport/ErrorResponse.cs?rev=1545459&view=auto
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.MQTT/trunk/src/main/csharp/Transport/ErrorResponse.cs (added)
+++ activemq/activemq-dotnet/Apache.NMS.MQTT/trunk/src/main/csharp/Transport/ErrorResponse.cs Mon Nov 25 23:38:36 2013
@@ -0,0 +1,40 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+using System;
+using Apache.NMS;
+
+namespace Apache.NMS.MQTT.Transport
+{
+	public class ErrorResponse : Response
+	{
+		private NMSException error;
+		public NMSException Error
+		{
+			get { return error; }
+			set { this.error = value; }
+		}
+
+		public override bool IsErrorResponse 
+		{
+			get 
+			{
+				return true;
+			}
+		}
+	}
+}
+

Propchange: activemq/activemq-dotnet/Apache.NMS.MQTT/trunk/src/main/csharp/Transport/ErrorResponse.cs
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: activemq/activemq-dotnet/Apache.NMS.MQTT/trunk/src/main/csharp/Transport/Response.cs
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.MQTT/trunk/src/main/csharp/Transport/Response.cs?rev=1545459&r1=1545458&r2=1545459&view=diff
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.MQTT/trunk/src/main/csharp/Transport/Response.cs (original)
+++ activemq/activemq-dotnet/Apache.NMS.MQTT/trunk/src/main/csharp/Transport/Response.cs Mon Nov 25 23:38:36 2013
@@ -23,7 +23,7 @@ namespace Apache.NMS.MQTT.Transport
 	/// </summary>
     public class Response : BaseCommand
     {
-        int correlationId;
+        short correlationId;
 
         ///
         /// <summery>
@@ -39,7 +39,7 @@ namespace Apache.NMS.MQTT.Transport
                 "CorrelationId = " + CorrelationId + " ]";
         }
 
-        public int CorrelationId
+        public short CorrelationId
         {
             get { return correlationId; }
             set { this.correlationId = value; }
@@ -55,7 +55,7 @@ namespace Apache.NMS.MQTT.Transport
             get { return true; }
         }
 
-        public bool IsErrorResponse
+        public virtual bool IsErrorResponse
         {
             get { return false; }
         }