public bool Authenticate(ConnectMessage msg) { return(Authenticate(msg.Username, msg.Password)); }
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); }
public bool Authenticate(byte[] message) { ConnectMessage msg = (ConnectMessage)MqttMessage.DecodeMessage(message); return(Authenticate(msg.Username, msg.Password)); }
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); }