@@ -372,7 +372,8 @@ struct MQTTPubAckPacket: MQTTPacket {
372372 func write( version: MQTTClient . Version , to byteBuffer: inout ByteBuffer ) throws {
373373 writeFixedHeader ( packetType: self . type, size: self . packetSize ( version: version) , to: & byteBuffer)
374374 byteBuffer. writeInteger ( self . packetId)
375- if version == . v5_0 {
375+ if version == . v5_0,
376+ ( self . reason != . success || self . properties. count > 0 ) {
376377 byteBuffer. writeInteger ( self . reason. rawValue)
377378 try self . properties. write ( to: & byteBuffer)
378379 }
@@ -399,7 +400,8 @@ struct MQTTPubAckPacket: MQTTPacket {
399400 }
400401
401402 func packetSize( version: MQTTClient . Version ) -> Int {
402- if version == . v5_0 {
403+ if version == . v5_0,
404+ ( self . reason != . success || self . properties. count > 0 ) {
403405 let propertiesPacketSize = self . properties. packetSize
404406 return 3 + MQTTSerializer. variableLengthIntegerPacketSize ( propertiesPacketSize) + propertiesPacketSize
405407 }
@@ -497,7 +499,8 @@ struct MQTTDisconnectPacket: MQTTPacket {
497499
498500 func write( version: MQTTClient . Version , to byteBuffer: inout ByteBuffer ) throws {
499501 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 ) {
501504 byteBuffer. writeInteger ( self . reason. rawValue)
502505 try self . properties. write ( to: & byteBuffer)
503506 }
@@ -520,7 +523,8 @@ struct MQTTDisconnectPacket: MQTTPacket {
520523 }
521524
522525 func packetSize( version: MQTTClient . Version ) -> Int {
523- if version == . v5_0 {
526+ if version == . v5_0,
527+ ( self . reason != . success || self . properties. count > 0 ) {
524528 let propertiesPacketSize = self . properties. packetSize
525529 return 1 + MQTTSerializer. variableLengthIntegerPacketSize ( propertiesPacketSize) + propertiesPacketSize
526530 }
@@ -566,8 +570,11 @@ struct MQTTAuthPacket: MQTTPacket {
566570
567571 func write( version: MQTTClient . Version , to byteBuffer: inout ByteBuffer ) throws {
568572 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+ }
571578 }
572579
573580 static func read( version: MQTTClient . Version , from packet: MQTTIncomingPacket ) throws -> Self {
@@ -586,6 +593,9 @@ struct MQTTAuthPacket: MQTTPacket {
586593 }
587594
588595 var packetSize : Int {
596+ if self . reason == . success && self . properties. count == 0 {
597+ return 0
598+ }
589599 let propertiesPacketSize = self . properties. packetSize
590600 return 1 + MQTTSerializer. variableLengthIntegerPacketSize ( propertiesPacketSize) + propertiesPacketSize
591601 }
0 commit comments