mirror of
https://github.com/dotnet/MQTTnet.git
synced 2026-10-17 01:33:03 +08:00
* Remove WebSocket4Net extension library * Remove UWP support * Drop support for all old frameworks * Update CI * Update CI * Update CI * Update CI * Remove obsolete code * Set default protocol version to 5.0.0 * Remove obsolete tests * Remove old dependencies * Reset release notes * Move server to dedicated project * Fix unit tests * Update and cleanup nuget packages * Fix unit tests Refactor code * No longer throw exception when receiving non success CONNACK * Enable nuget signing * Enable nuget signing * Enable nuget signing * Enable nuget signing * Enable nuget signing * Enable nuget signing * Enable nuget signing * Enable nuget signing * Enable code signing * Enable code signing * Enable code signing * Fix client endpoint handling * Improve CI * Fix CI * Fix CI * Fix CI * Fix CI * Import changes from version 4 * Cleanup target frameworks and remove obsolete code * Drop support for dotnet7.0 * Remove managed client * Version5 auditmode (#2016) Added NuGet audit mode and some other settings to get informed about security issues. * Address warnings from analyzers * Support for ReadOnlySequence as payload (#2046) * use ReadOnlySequence as payload * fix build * fix build * skip sign in forks * remove unnecessary owner * tests and extensions * remove test * simplify WritePacketBuffer, remove unused helper * Adjust namespaces * Fix build errors * Import latest fixes from main branch * Adjust namespaces --------- Co-authored-by: SeppPenner <HansM2013@gmx.de> Co-authored-by: Martin Regen <mregen@microsoft.com>
87 lines
3.3 KiB
C#
87 lines
3.3 KiB
C#
// Licensed to the .NET Foundation under one or more agreements.
|
|
// The .NET Foundation licenses this file to you under the MIT license.
|
|
// See the LICENSE file in the project root for more information.
|
|
|
|
using MQTTnet.Exceptions;
|
|
using MQTTnet.Packets;
|
|
|
|
namespace MQTTnet.Server.Internal.Formatter;
|
|
|
|
public static class MqttPublishPacketFactory
|
|
{
|
|
public static MqttPublishPacket Create(MqttConnectPacket connectPacket)
|
|
{
|
|
if (connectPacket == null)
|
|
{
|
|
throw new ArgumentNullException(nameof(connectPacket));
|
|
}
|
|
|
|
if (!connectPacket.WillFlag)
|
|
{
|
|
throw new MqttProtocolViolationException("The CONNECT packet contains no will message (WillFlag).");
|
|
}
|
|
|
|
ArraySegment<byte> willMessageBuffer = default;
|
|
if (connectPacket.WillMessage?.Length > 0)
|
|
{
|
|
willMessageBuffer = new ArraySegment<byte>(connectPacket.WillMessage);
|
|
}
|
|
|
|
var packet = new MqttPublishPacket
|
|
{
|
|
Topic = connectPacket.WillTopic,
|
|
PayloadSegment = willMessageBuffer,
|
|
QualityOfServiceLevel = connectPacket.WillQoS,
|
|
Retain = connectPacket.WillRetain,
|
|
ContentType = connectPacket.WillContentType,
|
|
CorrelationData = connectPacket.WillCorrelationData,
|
|
MessageExpiryInterval = connectPacket.WillMessageExpiryInterval,
|
|
PayloadFormatIndicator = connectPacket.WillPayloadFormatIndicator,
|
|
ResponseTopic = connectPacket.WillResponseTopic,
|
|
UserProperties = connectPacket.WillUserProperties
|
|
};
|
|
|
|
return packet;
|
|
}
|
|
|
|
public static MqttPublishPacket Create(MqttApplicationMessage applicationMessage)
|
|
{
|
|
if (applicationMessage == null)
|
|
{
|
|
throw new ArgumentNullException(nameof(applicationMessage));
|
|
}
|
|
|
|
// Copy all values to their matching counterparts.
|
|
// The not supported values in MQTT 3.1.1 are not serialized (excluded) later.
|
|
var packet = new MqttPublishPacket
|
|
{
|
|
Topic = applicationMessage.Topic,
|
|
Payload = applicationMessage.Payload,
|
|
QualityOfServiceLevel = applicationMessage.QualityOfServiceLevel,
|
|
Retain = applicationMessage.Retain,
|
|
Dup = applicationMessage.Dup,
|
|
ContentType = applicationMessage.ContentType,
|
|
CorrelationData = applicationMessage.CorrelationData,
|
|
MessageExpiryInterval = applicationMessage.MessageExpiryInterval,
|
|
PayloadFormatIndicator = applicationMessage.PayloadFormatIndicator,
|
|
ResponseTopic = applicationMessage.ResponseTopic,
|
|
TopicAlias = applicationMessage.TopicAlias,
|
|
SubscriptionIdentifiers = applicationMessage.SubscriptionIdentifiers,
|
|
UserProperties = applicationMessage.UserProperties
|
|
};
|
|
|
|
return packet;
|
|
}
|
|
|
|
public static MqttPublishPacket Create(MqttRetainedMessageMatch retainedMessage)
|
|
{
|
|
if (retainedMessage == null)
|
|
{
|
|
throw new ArgumentNullException(nameof(retainedMessage));
|
|
}
|
|
|
|
var publishPacket = Create(retainedMessage.ApplicationMessage);
|
|
publishPacket.QualityOfServiceLevel = retainedMessage.SubscriptionQualityOfServiceLevel;
|
|
return publishPacket;
|
|
}
|
|
} |