Ejemplo n.º 1
0
 public bool Authenticate(ConnectMessage msg)
 {
     return(Authenticate(msg.Username, msg.Password));
 }
Ejemplo n.º 2
0
        internal override MqttMessage Decode(byte[] message)
        {
            MqttMessage connectMessage = new ConnectMessage();

            int  index       = 0;
            byte fixedHeader = message[index];

            base.DecodeFixedHeader(fixedHeader);


            int remainingLength = base.DecodeRemainingLength(message);

            int temp = remainingLength; //increase the fixed header size

            do
            {
                index++;
                temp = temp / 128;
            } while (temp > 0);

            index++;

            byte[] buffer = new byte[remainingLength];
            Buffer.BlockCopy(message, index, buffer, 0, buffer.Length);

            index = 0;

            int protocolNameLength = ((buffer[index++] << 8) & 0xFF00);

            protocolNameLength |= buffer[index++];

            byte[] protocolName = new byte[protocolNameLength];
            try
            {
                Buffer.BlockCopy(buffer, index, protocolName, 0, protocolNameLength);
            }
            catch (Exception ex)
            {
                Trace.TraceError(ex.Message);
            }

            _protocolName = Encoding.UTF8.GetString(protocolName);

            //if (Encoding.UTF8.GetString(protocolName) != this.ProtocolName)
            //{
            //fault wrong protocol
            //}

            index += protocolNameLength;
            this.ProtocolVersion = (int)buffer[index++];
            //if (this.ProtocolVersion != (int)buffer[index++])
            //{
            //    //fault wrong version
            //}

            byte connectFlags = buffer[index++];

            this.usernameFlag = ((connectFlags >> 0x07) == 0x01) ? true : false;
            this.passwordFlag = ((connectFlags & 0x64) >> 0x06 == 0x01) ? true : false;
            this.WillRetain   = ((connectFlags & 0x032) >> 0x05 == 0x01) ? true : false;

            this.WillQualityOfServiceLevel = (QualityOfServiceLevelType)Convert.ToByte(((connectFlags & 0x1F) >> 0x03) | (connectFlags & 0x08 >> 0x03));
            this.WillFlag     = ((connectFlags & 0x04) >> 0x02 == 0x01) ? true : false;
            this.CleanSession = ((connectFlags & 0x02) >> 0x01 == 0x01) ? true : false;

            int keepAliveSec = ((buffer[index++] << 8) & 0xFF00);

            keepAliveSec |= buffer[index++];

            this.KeepAlive = keepAliveSec;


            int length = 0;

            this.ClientId = ByteContainer.DecodeString(buffer, index, out length);
            index        += length;

            if (this.WillFlag)
            {
                this.WillTopic   = ByteContainer.DecodeString(buffer, index, out length);
                index           += length;
                this.WillMessage = ByteContainer.DecodeString(buffer, index, out length);
                index           += length;
            }

            if (this.usernameFlag)
            {
                this.Username = ByteContainer.DecodeString(buffer, index, out length);
                index        += length;
            }

            if (this.passwordFlag)
            {
                this.Password = ByteContainer.DecodeString(buffer, index, out length);
                index        += length;
            }

            return(connectMessage);
        }
Ejemplo n.º 3
0
        public bool Authenticate(byte[] message)
        {
            ConnectMessage msg = (ConnectMessage)MqttMessage.DecodeMessage(message);

            return(Authenticate(msg.Username, msg.Password));
        }
Ejemplo n.º 4
0
        public static MqttMessage DecodeMessage(byte[] message)
        {
            byte fixedHeader = message[0];
            byte msgType     = (byte)(fixedHeader >> 0x04);

            MqttMessageType messageType = (MqttMessageType)msgType;

            MqttMessage mqttMessage = null;

            switch (messageType)
            {
            case MqttMessageType.CONNECT:
                mqttMessage = new ConnectMessage();
                break;

            case MqttMessageType.CONNACK:
                mqttMessage = new ConnectAckMessage();
                break;

            case MqttMessageType.PUBLISH:
                mqttMessage = new PublishMessage();
                break;

            case MqttMessageType.PUBACK:
                mqttMessage = new PublishAckMessage();
                break;

            case MqttMessageType.PUBREC:
                mqttMessage = new PublishAckMessage();
                break;

            case MqttMessageType.PUBREL:
                mqttMessage = new PublishAckMessage();
                break;

            case MqttMessageType.PUBCOMP:
                mqttMessage = new PublishAckMessage();
                break;

            case MqttMessageType.SUBSCRIBE:
                mqttMessage = new SubscribeMessage();
                break;

            case MqttMessageType.SUBACK:
                mqttMessage = new SubscriptionAckMessage();
                break;

            case MqttMessageType.UNSUBSCRIBE:
                mqttMessage = new UnsubscribeMessage();
                break;

            case MqttMessageType.UNSUBACK:
                mqttMessage = new UnsubscribeAckMessage();
                break;

            case MqttMessageType.PINGREQ:
                mqttMessage = new PingRequestMessage();
                break;

            case MqttMessageType.PINGRESP:
                mqttMessage = new PingResponseMessage();
                break;

            case MqttMessageType.DISCONNECT:
                mqttMessage = new DisconnectMessage();
                break;

            default:
                throw new InvalidOperationException("Unknown message type.");
            }

            mqttMessage.Decode(message);
            return(mqttMessage);
        }