Skip to content

PyPCAPKit v1.5.0b14

Pre-release
Pre-release

Choose a tag to compare

@pypcapkit-release pypcapkit-release released this 22 Oct 19:12
· 405 commits to main since this release

What's Changed

💥 Breaking Changes

  • fix(foundation): make register_mh_extension take schema keyword-only (#516) by @JarryShaw in #526
  • fix(corekit): reject a bool where a maker converts an address itself (#508) by @JarryShaw in #539
  • feat(foundation): make subclass registration opt-in for Engine, Reassembly, TraceFlow and Dumper (#514) by @JarryShaw in #547
  • fix(foundation): rename Engine's registry keyword to engine, which works on Python 3.10 (#514) by @JarryShaw in #557
  • fix(corekit): stop a malformed TCP SACK's exception type depending on sys.modules state (#525) by @JarryShaw in #562
  • fix(link,internet): reject a bool at the four remaining maker call sites (#540) by @JarryShaw in #568
  • fix(tcp): set MPTCP.subtype on construction, fix MP_CAPABLE's length/rkey (#566, #567) by @JarryShaw in #579
  • fix(ipv6-route): size the RPL fixed area at 4 octets per RFC 6554 (#564) by @JarryShaw in #590
  • fix(l2tp): refuse a version nibble other than 2, and settle what IP protocol 115 is (#548) by @JarryShaw in #589
  • fix(hopopt,ipv6-opts): size the ILNP nonce with a real ceiling, not a floored one (#601) by @JarryShaw in #607
  • fix(corekit): pad a short field read on the tail, not the head (#604) by @JarryShaw in #621
  • fix(hip): size the SOLUTION parameter as two whole-octet fields (#608) by @JarryShaw in #629
  • fix(corekit): keep SeekableReader's buffer content when truncating it (#622) by @JarryShaw in #633
  • fix(tcp): seed TCP.read's flag accumulator with Enum_Flags(0), not a no-op cast (#616) by @JarryShaw in #634
  • fix(pcap): Frame.len is the on-wire length, cap_len the captured one (#618) by @JarryShaw in #635
  • fix(foundation): close the input stream pcapkit opened, not the caller's (#610) by @JarryShaw in #636
  • fix(protocol): refuse a construction keyword no signature declares (#617) by @JarryShaw in #640
  • fix(corekit): keep SeekableReader's position bookkeeping in step (#643, #644) by @JarryShaw in #663
  • fix(hip): PUZZLE and SOLUTION builders must stop inventing wire-format values (#653, #654, #655) by @JarryShaw in #665
  • fix(httpv2): restore END_STREAM on rebuild, and seed the parsed flag accumulator as Flags (#652, #650) by @JarryShaw in #669
  • fix(dumpkit): a nameless flag member no longer renders as Type::None [0] (#648) by @JarryShaw in #670
  • fix(hip): pad HIP parameters to the record length RFC 7401 gives, not the contents (#651) by @JarryShaw in #664
  • fix(pcapng): bound an option's payload to the area its block declares (#594) by @JarryShaw in #676
  • fix(const): give the six unguarded registries the same bare-ValueError guard by @JarryShaw in #677
  • fix(corekit): refuse truncate on a reader that reports itself unwritable (#645) by @JarryShaw in #680
  • fix(pcapng): keep the captured octets every packet block declares (#646) by @JarryShaw in #683
  • fix(httpv2): keep the payload an unpadded DATA/HEADERS/PUSH_PROMISE declares by @JarryShaw in #691
  • fix(pcapng): stop a negative length reaching a read on a truncated capture (#678) by @JarryShaw in #699
  • fix(hip): correct R1_COUNTER's counter width and LOCATOR_SET's Length unit (#672) (#679) by @JarryShaw in #696
  • fix(corekit): resolve an unassigned enum value instead of raising aenum's ValueError (#701) by @JarryShaw in #706
  • feat(reg)!: split AppType into per-transport registries, dropping the portless rows by @JarryShaw in #754
  • fix(reg)!: reject an out-of-range port in AppType.get, and claim each span by transport by @JarryShaw in #764
  • fix(fields): fall through to the bounded pseudo-member instead of minting (#575) by @JarryShaw in #771
  • fix(const): refuse a multi-bit proto in AppType._dispatch rather than resolving it LSB-first (#759) by @JarryShaw in #783
  • feat(corekit,schema,utilities)!: enforce @Final at runtime on Info and Schema (#778) by @JarryShaw in #788
  • fix(fields): raise ProtocolError, not struct.error, on a negative resolved field length by @JarryShaw in #811
  • feat(reg)!: retype AppType.proto to its own transport, and give register_apptype varargs (#806) by @JarryShaw in #815
  • fix(reg)!: drop TransportProtocol's IntFlag base now that nothing composes by @JarryShaw in #836
  • fix(vendor): stop get() minting; missing fixed for 21 of 105 (#775) by @JarryShaw in #838
  • fix(toolkit): key pyshark link-type resolution on frame.encap_type by @JarryShaw in #850
  • fix(ipx): order Socket.missing range branches narrowest-first by @JarryShaw in #847
  • fix(reg): emit tcpdump legacy link-type names after current ones by @JarryShaw in #848
  • ci: rebuild engine-tests as a Python × engine matrix with three cell outcomes by @JarryShaw in #849
  • feat(corekit): add EnumRegistry base for const registries, convert 5 (#775) by @JarryShaw in #855
  • refactor(const,vendor): move the generated const-enum template onto EnumRegistry (#775) by @JarryShaw in #858
  • fix(corekit): make EnumRegistry.get's no-default marker an identity sentinel (#857) by @JarryShaw in #859
  • refactor(const,vendor): apply the mint/unmint criterion ruling to 82 registries (#775) by @JarryShaw in #861
  • fix(const,vendor): Old Xerox ethertype range shadowed by IEEE802.3 range by @JarryShaw in #865
  • fix(corekit): stop EnumRegistry.get's default from minting by @JarryShaw in #868
  • fix(const,vendor): bring 8 bespoke registries onto EnumRegistry, stop them minting by @JarryShaw in #869
  • fix(const,vendor): give Method's registered members their str payload (#870) by @JarryShaw in #871
  • fix(const,vendor): bring the AppType family onto EnumRegistry, stop it minting (#860) by @JarryShaw in #874
  • refactor(vendor,pcapng): generate TLSKeyLabel from the RFC 9850 IANA registry by @JarryShaw in #890
  • fix(const,vendor): make Method.get case-sensitive, per RFC 9110 (#896) by @JarryShaw in #907
  • fix(ipv6): parse unrecognised extension headers generically (#891) by @JarryShaw in #904
  • fix(corekit): export the sentinel objects, not their types by @JarryShaw in #916
  • ci(deps): narrow the all extra to core addons, add a dev extra (#910) by @JarryShaw in #914
  • refactor(ipv6): rename IPv6_GenericExt to IPv6_Ext and make it the shared base (#917) by @JarryShaw in #924
  • refactor(corekit): house all four sentinels in one shared module (#911) by @JarryShaw in #922
  • fix(vendor): source ExtensionHeader from the extension-header registry, not the protocol-numbers flag (#925) by @JarryShaw in #926
  • fix(corekit,utilities): raise pcapkit exceptions from EnumLookup.get, in stdlib Enum's shape (#923) by @JarryShaw in #927
  • refactor(corekit,protocols): normalise the four sentinel objects to SCREAMING_SNAKE (#937) by @JarryShaw in #939
  • fix(foundation): declare the engine-typed slots as EngineBase, not Engine by @JarryShaw in #1023
  • fix(foundation): name the base class the registrar guard actually checks by @JarryShaw in #1020
  • fix(protocols): let Application carry an undissected remainder (#719) by @JarryShaw in #1030
  • feat(protocols)!: move OSPF and RARP to the application layer (#719) by @JarryShaw in #1031
  • fix(tcp): parse all five MP_CAPABLE lengths of RFC 8684 (#1042) by @JarryShaw in #1048
  • fix(protocols)!: rename OSPF_CrytographicAuthentication and group OSPF under the application layer by @JarryShaw in #1116
  • fix(httpv2)!: frame Length counts the 9-octet header, so RFC 9113 frames are rejected by @JarryShaw in #1138
  • fix(arp): non-IP protocol addresses pack as ASCII text, and hlen/plen are never checked by @JarryShaw in #1145
  • fix(tcp): from_data reorders and re-pads TCP options by @JarryShaw in #1163
  • fix(protocols): from_data keeps declared lengths on truncated captures by @JarryShaw in #1166
  • fix(protocols): a payload layer parsed from a short stream rebuilds default-filled octets by @JarryShaw in #1171
  • fix(l2tp): L2TPv2.from_data drops the L flag and the Length field by @JarryShaw in #1174
  • fix(l2tpv2): correct the Type enum and L bit against RFC 2661 (#1175) by @JarryShaw in #1183
  • fix(ipv6-opts): RPL option drops reserved flag bits on rebuild and rejects RFC 6553 sub-TLVs by @JarryShaw in #1201
  • fix(link): ARP family rebuilds InARP/DRARP, any Ethernet hlen, and a ptype/plen mismatch by @JarryShaw in #1224
  • fix(link)!: L2TPv2 drops the reserved flag bits on rebuild, and make() drops a lone ns or nr by @JarryShaw in #1226
  • fix(sctp): chunk flags, reserved fields and final padding round-trip by @JarryShaw in #1253
  • fix(tcp): MPTCP options round-trip byte-exactly (#1212-#1217, #1220) by @JarryShaw in #1254
  • fix(ftp,httpv1): FTP and HTTP/1 lines do not rebuild byte for byte by @JarryShaw in #1301
  • fix(ospf,ngap): keep the parsed OSPF Packet Length and refuse octets after the NGAP-PDU by @JarryShaw in #1304
  • fix(dumpkit)!: output writers drop or corrupt what the packets carried by @JarryShaw in #1305
  • fix(ipv6): IPv6 core headers rebuild byte-exactly (#1230, #1231, #1236, #1235) by @JarryShaw in #1307
  • fix(ipv6-opts): rebuild HOPOPT and IPv6-Opts option areas byte-exactly by @JarryShaw in #1310
  • fix(ipx,ah): IPX from_data raises struct.error; AH reserved field written back as zero by @JarryShaw in #1338
  • fix(hip): rebuild parsed packets byte-exactly (Header Length, no parameters, PUZZLE lifetime, reserved bits) by @JarryShaw in #1342
  • fix(httpv2): HTTP/2 frames lose octets on rebuild (#1242-#1248, #1251) by @JarryShaw in #1341
  • fix(ipv4): rebuild option areas, route slots, timestamps and reserved bits byte-exactly by @JarryShaw in #1344
  • fix(mh): keep zero-length PadN, reserved fields and BU/BA flag bits on rebuild by @JarryShaw in #1345
  • fix(corekit): IPv4InterfaceField keeps non-netmask masks; OrderedMultiDict deepcopy keeps order by @JarryShaw in #1346
  • fix(ftp,httpv1): keep the raw command case, HTTP/1 whitespace and field octets, and parse whole multi-line FTP replies by @JarryShaw in #1347
  • fix(tcp)!: reserved bits, post-EOOL octets and the UTO granularity round-trip (#1211, #1218, #1219) by @JarryShaw in #1348
  • fix(hip): Locator flags drop the seven bits other than Preferred on rebuild by @JarryShaw in #1367
  • fix(pcapng): rebuilt blocks keep their lengths and padding (#1276, #1279, #1280, #1282, #1283, #1284) by @JarryShaw in #1373
  • fix(pcapng): blocks and options rebuild as parsed (#1272, #1273, #1277, #1278, #1281, #1286) by @JarryShaw in #1378
  • fix(ipv4)!: the TS option zeroes the timestamp slots beyond the pointer on rebuild (#1349) by @JarryShaw in #1390
  • fix(protocols)!: a declared length running past the data is accepted and zero-filled on rebuild by @JarryShaw in #1398
  • fix(ipv4)!: TS and SEC options do not rebuild byte for byte (#1391, #1392, #1393) by @JarryShaw in #1399
  • fix(ipv6)!: a CALIPSO option loses its trailing pad and shrinks its length on rebuild (#1403) by @JarryShaw in #1407
  • fix(ipv4,tcp)!: a header length declared past the data zero-fills on rebuild; TS make() rejects string address keys (#1402, #1404) by @JarryShaw in #1411
  • fix(pcapng)!: PCAP-NG round-trip follow-ups (#1382, #1383, #1384, #1401, #1405, #1406) by @JarryShaw in #1412
  • fix(hip): three BitField namespaces leave reserved bits unnamed, so they rebuild as zero by @JarryShaw in #1419
  • fix(pcapng)!: keep malformed journal entries and short packet blocks as captured (#1413, #1414) by @JarryShaw in #1420
  • fix(mh): keep the reserved bits of 24 BitField flag namespaces on rebuild by @JarryShaw in #1421
  • fix(pcapng)!: keep an SHB or IDB shorter than its fixed fields as captured (#1422) by @JarryShaw in #1425
  • fix(ipv4,ipv6)!: keep the octets past Total Length or Payload Length as captured (#1209) by @JarryShaw in #1431
  • fix(ipx)!: keep the octets past the IPX Length field as captured (#1433) by @JarryShaw in #1435
  • fix(corekit)!: non-zero padding octets are zeroed on rebuild (#1223) by @JarryShaw in #1436
  • fix(mh)!: keep the reserved octets MH PaddingField sites capture (#1437) by @JarryShaw in #1442
  • fix(ipv6)!: an extension header parsed with extension=True cannot rebuild from its own info (#1446) by @JarryShaw in #1449
  • fix(l2tpv2,ospf)!: keep the octets past the Length field as captured (#1455) by @JarryShaw in #1460
  • fix(hip)!: parse and keep the two fixed header bits (#1459) by @JarryShaw in #1462
  • fix(corekit)!: to_dict() returns an InfoDict, so a repeated IPv6 extension header survives the dict rebuild (#1453) by @JarryShaw in #1466
  • fix(udp)!: keep the octets past the UDP Length field as captured (#1461) by @JarryShaw in #1467
  • fix(sctp)!: keep the octets after the last whole chunk as captured (#1468) by @JarryShaw in #1472
  • fix(pcap,pcapng)!: a cut PCAP header or PCAP-NG block rebuilds as captured (#1470) by @JarryShaw in #1475
  • fix(ipv6)!: rebuild a cut extension header chain byte-exact (#1471, #1473) by @JarryShaw in #1476
  • refactor(corekit)!: Info.to_dict() returns an OrderedMultiDict; add MultiInfo and OrderedMultiInfo (#1484) by @JarryShaw in #1523
  • refactor(corekit)!: move the byte-order field helpers into corekit (#1711) by @JarryShaw in #1715
  • refactor(corekit)!: move decorators into corekit (#1735) by @JarryShaw in #1737
  • feat(utilities)!: one config module for the tunable limits (#1726) by @JarryShaw in #1743
  • refactor!: drop the surviving re-exports of moved names (#1744) by @JarryShaw in #1754
  • fix(protocols)!: keep pack() from rewriting the instance it is called on (#1769) by @JarryShaw in #1791
  • fix(protocols)!: pad two octets with one PadN, not two Pad1 (#1793) by @JarryShaw in #1812
  • fix(const)!: name LLACode codes 0 and 2 as RFC 5568 does (#1848) by @JarryShaw in #1872
  • fix(protocols)!: make NTPTimestamp and PMIPv6Timestamp Info classes (#1886) by @JarryShaw in #1887
  • fix(foundation): close only an owned input on leaving the with block (#1999) by @JarryShaw in #2000
  • fix(protocols): find the payload by protocol name and follow IPv6 next headers, not key order (#2003) by @JarryShaw in #2014

✨ Features

  • feat(protocols): opt-in code= registration with enum-type inference for Protocol/ProtocolBase by @JarryShaw in #570
  • feat(util): have bump_version.py keep CITATION.cff in step with the bump by @JarryShaw in #625
  • feat(reg): expose AppType aliases in repr/str and allow registering them per transport (#807) by @JarryShaw in #837
  • docs(changelog): summarise each release with a link to its full entry (#900) by @JarryShaw in #909
  • feat(changelog): cite issues, PRs and discussions with Sphinx roles by @JarryShaw in #1008
  • feat(engines): type the third-party engine packages with local stubs (#1878) by @JarryShaw in #1882

🐛 Fixes

♻️ Refactoring

⚙️ CI & Build

⚡ Performance

📝 Documentation

🧹 Chores

🧪 Tests

👒 Dependencies

🏕 Changes

Full Changelog: v1.5.0b3...v1.5.0b14