@@ -372,7 +372,8 @@ struct MQTTPubAckPacket: MQTTPacket {
372
372
func write( version: MQTTClient . Version , to byteBuffer: inout ByteBuffer ) throws {
373
373
writeFixedHeader ( packetType: self . type, size: self . packetSize ( version: version) , to: & byteBuffer)
374
374
byteBuffer. writeInteger ( self . packetId)
375
- if version == . v5_0 {
375
+ if version == . v5_0,
376
+ ( self . reason != . success || self . properties. count > 0 ) {
376
377
byteBuffer. writeInteger ( self . reason. rawValue)
377
378
try self . properties. write ( to: & byteBuffer)
378
379
}
@@ -399,7 +400,8 @@ struct MQTTPubAckPacket: MQTTPacket {
399
400
}
400
401
401
402
func packetSize( version: MQTTClient . Version ) -> Int {
402
- if version == . v5_0 {
403
+ if version == . v5_0,
404
+ ( self . reason != . success || self . properties. count > 0 ) {
403
405
let propertiesPacketSize = self . properties. packetSize
404
406
return 3 + MQTTSerializer. variableLengthIntegerPacketSize ( propertiesPacketSize) + propertiesPacketSize
405
407
}
@@ -497,7 +499,8 @@ struct MQTTDisconnectPacket: MQTTPacket {
497
499
498
500
func write( version: MQTTClient . Version , to byteBuffer: inout ByteBuffer ) throws {
499
501
writeFixedHeader ( packetType: self . type, size: self . packetSize ( version: version) , to: & byteBuffer)
500
- if version == . v5_0 {
502
+ if version == . v5_0,
503
+ ( self . reason != . success || self . properties. count > 0 ) {
501
504
byteBuffer. writeInteger ( self . reason. rawValue)
502
505
try self . properties. write ( to: & byteBuffer)
503
506
}
@@ -520,7 +523,8 @@ struct MQTTDisconnectPacket: MQTTPacket {
520
523
}
521
524
522
525
func packetSize( version: MQTTClient . Version ) -> Int {
523
- if version == . v5_0 {
526
+ if version == . v5_0,
527
+ ( self . reason != . success || self . properties. count > 0 ) {
524
528
let propertiesPacketSize = self . properties. packetSize
525
529
return 1 + MQTTSerializer. variableLengthIntegerPacketSize ( propertiesPacketSize) + propertiesPacketSize
526
530
}
@@ -566,8 +570,11 @@ struct MQTTAuthPacket: MQTTPacket {
566
570
567
571
func write( version: MQTTClient . Version , to byteBuffer: inout ByteBuffer ) throws {
568
572
writeFixedHeader ( packetType: self . type, size: self . packetSize, to: & byteBuffer)
569
- byteBuffer. writeInteger ( self . reason. rawValue)
570
- try self . properties. write ( to: & byteBuffer)
573
+
574
+ if self . reason != . success || self . properties. count > 0 {
575
+ byteBuffer. writeInteger ( self . reason. rawValue)
576
+ try self . properties. write ( to: & byteBuffer)
577
+ }
571
578
}
572
579
573
580
static func read( version: MQTTClient . Version , from packet: MQTTIncomingPacket ) throws -> Self {
@@ -586,6 +593,9 @@ struct MQTTAuthPacket: MQTTPacket {
586
593
}
587
594
588
595
var packetSize : Int {
596
+ if self . reason == . success && self . properties. count == 0 {
597
+ return 0
598
+ }
589
599
let propertiesPacketSize = self . properties. packetSize
590
600
return 1 + MQTTSerializer. variableLengthIntegerPacketSize ( propertiesPacketSize) + propertiesPacketSize
591
601
}
0 commit comments