Commit a1dadc4
fix: gracefully decode v3.1.1 packets in v5 sessions (mixed broker compat) (#40)
* fix: gracefully decode v3.1.1 packets in v5 sessions (mixed broker compat)
Some brokers (e.g. mqtt.meshtastic.pt) accept an MQTT 5.0 CONNECT but
respond with 3.1.1-style packets (no properties section in CONNACK,
SUBACK, UNSUBACK, PUBLISH, PUBACK, etc.). This caused a crash in the
properties decoder: 'Not enough bytes for boolean at offset 4' or
'Unknown property ID: 0x85', killing the read loop and triggering an
infinite reconnect cycle.
Fix: introduce tryDecodePropertiesSection() — a try/catch wrapper around
the strict decoder that returns null on IllegalArgumentException. Applied
in decodePublish, decodePubAckLike (size >= 4), decodeSubAck, and
decodeUnsubAck so that when v5 properties parsing fails, the decoder
falls back to treating the bytes as 3.1.1 (no properties, bare reason
codes / raw payload).
This mirrors HiveMQ's approach for CONNACK (tryDecodeMqtt3) but extends
it to all response packet types for full compatibility with misconfigured
brokers that advertise v5 but speak v3.1.1.
Also adds bounds checks and hex-dump diagnostics to the properties
decoder for easier debugging of future protocol issues.
Tested successfully against mqtt.meshtastic.pt:1883 — 10/10 publishes
succeed, incoming mesh traffic decoded correctly, zero reconnects.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* chore: bump version to 0.3.6
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>1 parent 81bb29a commit a1dadc4
6 files changed
Lines changed: 597 additions & 19 deletions
File tree
- library/src
- commonMain/kotlin/org/meshtastic/mqtt
- packet
- commonTest/kotlin/org/meshtastic/mqtt
- jvmTest/kotlin/org/meshtastic/mqtt
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
16 | 16 | | |
17 | 17 | | |
18 | 18 | | |
19 | | - | |
| 19 | + | |
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
Lines changed: 6 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
58 | 58 | | |
59 | 59 | | |
60 | 60 | | |
| 61 | + | |
61 | 62 | | |
62 | 63 | | |
63 | 64 | | |
| |||
830 | 831 | | |
831 | 832 | | |
832 | 833 | | |
833 | | - | |
| 834 | + | |
| 835 | + | |
| 836 | + | |
| 837 | + | |
| 838 | + | |
834 | 839 | | |
835 | 840 | | |
836 | 841 | | |
| |||
Lines changed: 50 additions & 10 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
250 | 250 | | |
251 | 251 | | |
252 | 252 | | |
253 | | - | |
254 | | - | |
255 | | - | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
256 | 263 | | |
257 | 264 | | |
258 | 265 | | |
| |||
297 | 304 | | |
298 | 305 | | |
299 | 306 | | |
300 | | - | |
| 307 | + | |
301 | 308 | | |
302 | 309 | | |
303 | 310 | | |
| |||
376 | 383 | | |
377 | 384 | | |
378 | 385 | | |
379 | | - | |
380 | | - | |
381 | | - | |
| 386 | + | |
| 387 | + | |
| 388 | + | |
| 389 | + | |
| 390 | + | |
| 391 | + | |
| 392 | + | |
| 393 | + | |
| 394 | + | |
| 395 | + | |
382 | 396 | | |
383 | 397 | | |
384 | 398 | | |
| |||
461 | 475 | | |
462 | 476 | | |
463 | 477 | | |
464 | | - | |
465 | | - | |
| 478 | + | |
| 479 | + | |
| 480 | + | |
| 481 | + | |
| 482 | + | |
| 483 | + | |
| 484 | + | |
| 485 | + | |
| 486 | + | |
| 487 | + | |
466 | 488 | | |
467 | 489 | | |
468 | 490 | | |
| |||
548 | 570 | | |
549 | 571 | | |
550 | 572 | | |
551 | | - | |
| 573 | + | |
| 574 | + | |
| 575 | + | |
| 576 | + | |
| 577 | + | |
| 578 | + | |
| 579 | + | |
| 580 | + | |
| 581 | + | |
| 582 | + | |
| 583 | + | |
| 584 | + | |
| 585 | + | |
| 586 | + | |
| 587 | + | |
| 588 | + | |
| 589 | + | |
| 590 | + | |
| 591 | + | |
552 | 592 | | |
553 | 593 | | |
554 | 594 | | |
| |||
Lines changed: 18 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
242 | 242 | | |
243 | 243 | | |
244 | 244 | | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
245 | 249 | | |
246 | 250 | | |
247 | 251 | | |
248 | 252 | | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
249 | 259 | | |
250 | 260 | | |
251 | 261 | | |
| |||
445 | 455 | | |
446 | 456 | | |
447 | 457 | | |
448 | | - | |
| 458 | + | |
| 459 | + | |
| 460 | + | |
| 461 | + | |
449 | 462 | | |
450 | | - | |
| 463 | + | |
| 464 | + | |
| 465 | + | |
| 466 | + | |
451 | 467 | | |
452 | 468 | | |
453 | 469 | | |
| |||
Lines changed: 9 additions & 5 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1145 | 1145 | | |
1146 | 1146 | | |
1147 | 1147 | | |
1148 | | - | |
| 1148 | + | |
1149 | 1149 | | |
1150 | 1150 | | |
1151 | 1151 | | |
| |||
1154 | 1154 | | |
1155 | 1155 | | |
1156 | 1156 | | |
1157 | | - | |
1158 | | - | |
| 1157 | + | |
| 1158 | + | |
| 1159 | + | |
1159 | 1160 | | |
1160 | 1161 | | |
1161 | 1162 | | |
| |||
1166 | 1167 | | |
1167 | 1168 | | |
1168 | 1169 | | |
1169 | | - | |
| 1170 | + | |
1170 | 1171 | | |
1171 | | - | |
| 1172 | + | |
1172 | 1173 | | |
| 1174 | + | |
| 1175 | + | |
| 1176 | + | |
1173 | 1177 | | |
1174 | 1178 | | |
1175 | 1179 | | |
| |||
0 commit comments