Skip to content

Commit c48e704

Browse files
authored
Don't output reason and properties if successful and there no properties (#65)
* Conform MQTTProperties to Collection * Don't output reason/properties if success and empty
1 parent 2b2d60f commit c48e704

File tree

2 files changed

+27
-9
lines changed

2 files changed

+27
-9
lines changed

Sources/MQTTNIO/MQTTPacket.swift

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

Sources/MQTTNIO/MQTTProperties.swift

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,17 @@ extension MQTTProperties: ExpressibleByArrayLiteral {
8585
}
8686
}
8787

88-
extension MQTTProperties: Sequence {
89-
public __consuming func makeIterator() -> Array<Property>.Iterator {
90-
return self.properties.makeIterator()
88+
extension MQTTProperties: Collection {
89+
public typealias Index = Array<Property>.Index
90+
public var startIndex: Index { properties.startIndex }
91+
public var endIndex: Index { properties.endIndex }
92+
93+
public subscript(_ index: Index) -> Property {
94+
return properties[index]
95+
}
96+
97+
public func index(after index: Index) -> Index {
98+
return properties.index(after: index)
9199
}
92100
}
93101

0 commit comments

Comments
 (0)