From 96c5e573a7b72ad345814f4fe53831ad20c03a2f Mon Sep 17 00:00:00 2001 From: christian <6939810+chkr1011@users.noreply.github.com> Date: Mon, 2 Dec 2024 12:23:53 +0100 Subject: [PATCH] Merge master --- .../Events/ValidatingConnectionEventArgs.cs | 310 +++++++++--------- 1 file changed, 154 insertions(+), 156 deletions(-) diff --git a/Source/MQTTnet.Server/Events/ValidatingConnectionEventArgs.cs b/Source/MQTTnet.Server/Events/ValidatingConnectionEventArgs.cs index 60cdf2540..e4e1fecfa 100644 --- a/Source/MQTTnet.Server/Events/ValidatingConnectionEventArgs.cs +++ b/Source/MQTTnet.Server/Events/ValidatingConnectionEventArgs.cs @@ -2,9 +2,7 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using System; using System.Collections; -using System.Collections.Generic; using System.Net; using System.Security.Cryptography.X509Certificates; using System.Text; @@ -16,11 +14,11 @@ using MQTTnet.Protocol; using MQTTnet.Server.EnhancedAuthentication; -namespace MQTTnet.Server +namespace MQTTnet.Server; + +public sealed class ValidatingConnectionEventArgs : EventArgs { - public sealed class ValidatingConnectionEventArgs : EventArgs - { - readonly MqttConnectPacket _connectPacket; + readonly MqttConnectPacket _connectPacket; public ValidatingConnectionEventArgs(MqttConnectPacket connectPacket, IMqttChannelAdapter clientAdapter, IDictionary sessionItems, CancellationToken cancellationToken) { @@ -30,23 +28,23 @@ public ValidatingConnectionEventArgs(MqttConnectPacket connectPacket, IMqttChann CancellationToken = cancellationToken; } - /// - /// Gets or sets the assigned client identifier. - /// MQTTv5 only. - /// - public string AssignedClientIdentifier { get; set; } + /// + /// Gets or sets the assigned client identifier. + /// MQTTv5 only. + /// + public string AssignedClientIdentifier { get; set; } - /// - /// Gets or sets the authentication data. - /// MQTT 5.0.0+ feature. - /// - public byte[] AuthenticationData => _connectPacket.AuthenticationData; + /// + /// Gets or sets the authentication data. + /// MQTT 5.0.0+ feature. + /// + public byte[] AuthenticationData => _connectPacket.AuthenticationData; - /// - /// Gets or sets the authentication method. - /// MQTT 5.0.0+ feature. - /// - public string AuthenticationMethod => _connectPacket.AuthenticationMethod; + /// + /// Gets or sets the authentication method. + /// MQTT 5.0.0+ feature. + /// + public string AuthenticationMethod => _connectPacket.AuthenticationMethod; public CancellationToken CancellationToken { get; } @@ -56,141 +54,141 @@ public ValidatingConnectionEventArgs(MqttConnectPacket connectPacket, IMqttChann /// public IMqttChannelAdapter ChannelAdapter { get; } - /// - /// Gets or sets a value indicating whether clean sessions are used or not. - /// When a client connects to a broker it can connect using either a non persistent connection (clean session) or a - /// persistent connection. - /// With a non persistent connection the broker doesn't store any subscription information or undelivered messages for - /// the client. - /// This mode is ideal when the client only publishes messages. - /// It can also connect as a durable client using a persistent connection. - /// In this mode, the broker will store subscription information, and undelivered messages for the client. - /// - public bool? CleanSession => _connectPacket.CleanSession; - - public X509Certificate2 ClientCertificate => ChannelAdapter.ClientCertificate; - - /// - /// Gets the client identifier. - /// Hint: This identifier needs to be unique over all used clients / devices on the broker to avoid connection issues. - /// - public string ClientId => _connectPacket.ClientId; - - public EndPoint RemoteEndPoint => ChannelAdapter.RemoteEndPoint; - - [Obsolete("Use RemoteEndPoint instead.")] - public string Endpoint => RemoteEndPoint?.ToString(); - - public bool IsSecureConnection => ChannelAdapter.IsSecureConnection; - - /// - /// Gets or sets the keep alive period. - /// The connection is normally left open by the client so that is can send and receive data at any time. - /// If no data flows over an open connection for a certain time period then the client will generate a PINGREQ and - /// expect to receive a PINGRESP from the broker. - /// This message exchange confirms that the connection is open and working. - /// This period is known as the keep alive period. - /// - public ushort? KeepAlivePeriod => _connectPacket.KeepAlivePeriod; - - /// - /// A value of 0 indicates that the value is not used. - /// - public uint MaximumPacketSize => _connectPacket.MaximumPacketSize; - - public string Password => Encoding.UTF8.GetString(RawPassword ?? EmptyBuffer.Array); - - public MqttProtocolVersion ProtocolVersion => ChannelAdapter.PacketFormatterAdapter.ProtocolVersion; - - public byte[] RawPassword => _connectPacket.Password; - - /// - /// Gets or sets the reason code. When a MQTTv3 client connects the enum value must be one which is - /// also supported in MQTTv3. Otherwise the connection attempt will fail because not all codes can be - /// converted properly. - /// MQTT 5.0.0+ feature. - /// - public MqttConnectReasonCode ReasonCode { get; set; } = MqttConnectReasonCode.Success; - - public string ReasonString { get; set; } - - /// - /// Gets or sets the receive maximum. - /// This gives the maximum length of the receive messages. - /// A value of 0 indicates that the value is not used. - /// - public ushort ReceiveMaximum => _connectPacket.ReceiveMaximum; - - /// - /// Gets the request problem information. - /// MQTT 5.0.0+ feature. - /// - public bool RequestProblemInformation => _connectPacket.RequestProblemInformation; - - /// - /// Gets the request response information. - /// MQTT 5.0.0+ feature. - /// - public bool RequestResponseInformation => _connectPacket.RequestResponseInformation; - - /// - /// Gets or sets the response authentication data. - /// MQTT 5.0.0+ feature. - /// - public byte[] ResponseAuthenticationData { get; set; } - - /// - /// Gets or sets the response user properties. - /// In MQTT 5, user properties are basic UTF-8 string key-value pairs that you can append to almost every type of MQTT - /// packet. - /// As long as you don’t exceed the maximum message size, you can use an unlimited number of user properties to add - /// metadata to MQTT messages and pass information between publisher, broker, and subscriber. - /// The feature is very similar to the HTTP header concept. - /// MQTT 5.0.0+ feature. - /// - public List ResponseUserProperties { get; set; } - - /// - /// Gets or sets the server reference. This can be used together with i.e. "Server Moved" to send - /// a different server address to the client. - /// MQTT 5.0.0+ feature. - /// - public string ServerReference { get; set; } - - /// - /// Gets the session expiry interval. - /// The time after a session expires when it's not actively used. - /// A value of 0 means no expiation. - /// - public uint SessionExpiryInterval => _connectPacket.SessionExpiryInterval; - - /// - /// Gets or sets a key/value collection that can be used to share data within the scope of this session. - /// - public IDictionary SessionItems { get; } - - /// - /// Gets or sets the topic alias maximum. - /// This gives the maximum length of the topic alias. - /// A value of 0 indicates that the value is not used. - /// - public ushort TopicAliasMaximum => _connectPacket.TopicAliasMaximum; - - public string UserName => _connectPacket.Username; - - /// - /// Gets or sets the user properties. - /// In MQTT 5, user properties are basic UTF-8 string key-value pairs that you can append to almost every type of MQTT - /// packet. - /// As long as you don’t exceed the maximum message size, you can use an unlimited number of user properties to add - /// metadata to MQTT messages and pass information between publisher, broker, and subscriber. - /// The feature is very similar to the HTTP header concept. - /// MQTT 5.0.0+ feature. - /// - public List UserProperties => _connectPacket.UserProperties; - - /// - /// Gets or sets the will delay interval. + /// + /// Gets or sets a value indicating whether clean sessions are used or not. + /// When a client connects to a broker it can connect using either a non persistent connection (clean session) or a + /// persistent connection. + /// With a non persistent connection the broker doesn't store any subscription information or undelivered messages for + /// the client. + /// This mode is ideal when the client only publishes messages. + /// It can also connect as a durable client using a persistent connection. + /// In this mode, the broker will store subscription information, and undelivered messages for the client. + /// + public bool? CleanSession => _connectPacket.CleanSession; + + public X509Certificate2 ClientCertificate => ChannelAdapter.ClientCertificate; + + /// + /// Gets the client identifier. + /// Hint: This identifier needs to be unique over all used clients / devices on the broker to avoid connection issues. + /// + public string ClientId => _connectPacket.ClientId; + + [Obsolete("Use RemoteEndPoint instead.")] + public string Endpoint => RemoteEndPoint?.ToString(); + + public bool IsSecureConnection => ChannelAdapter.IsSecureConnection; + + /// + /// Gets or sets the keep alive period. + /// The connection is normally left open by the client so that is can send and receive data at any time. + /// If no data flows over an open connection for a certain time period then the client will generate a PINGREQ and + /// expect to receive a PINGRESP from the broker. + /// This message exchange confirms that the connection is open and working. + /// This period is known as the keep alive period. + /// + public ushort? KeepAlivePeriod => _connectPacket.KeepAlivePeriod; + + /// + /// A value of 0 indicates that the value is not used. + /// + public uint MaximumPacketSize => _connectPacket.MaximumPacketSize; + + public string Password => Encoding.UTF8.GetString(RawPassword ?? EmptyBuffer.Array); + + public MqttProtocolVersion ProtocolVersion => ChannelAdapter.PacketFormatterAdapter.ProtocolVersion; + + public byte[] RawPassword => _connectPacket.Password; + + /// + /// Gets or sets the reason code. When a MQTTv3 client connects the enum value must be one which is + /// also supported in MQTTv3. Otherwise the connection attempt will fail because not all codes can be + /// converted properly. + /// MQTT 5.0.0+ feature. + /// + public MqttConnectReasonCode ReasonCode { get; set; } = MqttConnectReasonCode.Success; + + public string ReasonString { get; set; } + + /// + /// Gets or sets the receive maximum. + /// This gives the maximum length of the received messages. + /// A value of 0 indicates that the value is not used. + /// + public ushort ReceiveMaximum => _connectPacket.ReceiveMaximum; + + public EndPoint RemoteEndPoint => ChannelAdapter.RemoteEndPoint; + + /// + /// Gets the request problem information. + /// MQTT 5.0.0+ feature. + /// + public bool RequestProblemInformation => _connectPacket.RequestProblemInformation; + + /// + /// Gets the request response information. + /// MQTT 5.0.0+ feature. + /// + public bool RequestResponseInformation => _connectPacket.RequestResponseInformation; + + /// + /// Gets or sets the response authentication data. + /// MQTT 5.0.0+ feature. + /// + public byte[] ResponseAuthenticationData { get; set; } + + /// + /// Gets or sets the response user properties. + /// In MQTT 5, user properties are basic UTF-8 string key-value pairs that you can append to almost every type of MQTT + /// packet. + /// As long as you don’t exceed the maximum message size, you can use an unlimited number of user properties to add + /// metadata to MQTT messages and pass information between publisher, broker, and subscriber. + /// The feature is very similar to the HTTP header concept. + /// MQTT 5.0.0+ feature. + /// + public List ResponseUserProperties { get; set; } + + /// + /// Gets or sets the server reference. This can be used together with i.e. "Server Moved" to send + /// a different server address to the client. + /// MQTT 5.0.0+ feature. + /// + public string ServerReference { get; set; } + + /// + /// Gets the session expiry interval. + /// The time after a session expires when it's not actively used. + /// A value of 0 means no expiation. + /// + public uint SessionExpiryInterval => _connectPacket.SessionExpiryInterval; + + /// + /// Gets or sets a key/value collection that can be used to share data within the scope of this session. + /// + public IDictionary SessionItems { get; } + + /// + /// Gets or sets the topic alias maximum. + /// This gives the maximum length of the topic alias. + /// A value of 0 indicates that the value is not used. + /// + public ushort TopicAliasMaximum => _connectPacket.TopicAliasMaximum; + + public string UserName => _connectPacket.Username; + + /// + /// Gets or sets the user properties. + /// In MQTT 5, user properties are basic UTF-8 string key-value pairs that you can append to almost every type of MQTT + /// packet. + /// As long as you don’t exceed the maximum message size, you can use an unlimited number of user properties to add + /// metadata to MQTT messages and pass information between publisher, broker, and subscriber. + /// The feature is very similar to the HTTP header concept. + /// MQTT 5.0.0+ feature. + /// + public List UserProperties => _connectPacket.UserProperties; + + /// + /// Gets or sets the delay interval for the will message. /// This is the time between the client disconnect and the time the will message will be sent. /// A value of 0 indicates that the value is not used. ///