2026-08-15 Miroslav Stampar <miroslav@sqlmap.org>
    * Version 2.0.1 tagged (packaging, CI and documentation release; no API changes):
        * PyPI metadata modernized: long description is now README.md (rendered as Markdown),
          plus an accurate summary, keywords, project URLs, SPDX license, classifiers and a
          python_requires of 2.7 and 3.8+.
        * Packaging fix: data_files no longer globs directories, so a leftover tests/__pycache__
          can no longer abort the build with "can't copy 'tests/__pycache__'".
        * Python 3.14 supported: added to the cibuildwheel matrix (CPython 3.9-3.14) and to the
          test matrix; builds and passes the full test suite.
        * Release workflow fixed: it now triggers on this project's bare version tags, builds and
          tests wheels for Linux (x86_64/aarch64, glibc and musl) and macOS (x86_64/arm64),
          verifies the sdist, and uploads to PyPI only from a published GitHub Release or an
          explicit manual dispatch. New tests workflow builds and tests every commit.
        * Documentation rewritten to describe the full 2.0 API surface - loop_filtered(),
          filtered_stats(), loop_to_buffer(), next_batch(), set_fanout(), flow-head tracking,
          large IPv4 address-set matching and the built-in security profile - and to state what
          is actually shipped (no Windows wheels; Windows builds from source with the Npcap SDK).
        * Dropped the obsolete AppVeyor configuration (Python 2.7/3.4/3.5 against WinPcap).
        * Fix: pcap_dealloc() dropped the new reference to None returned by p_close(), leaking
          one reference to None per destroyed Reader (invisible since None became immortal in
          CPython 3.12).

2026-06-26 Miroslav Stampar <miroslav@sqlmap.org>
    * Version 2.0.0 tagged with major new capabilities (in-C classification + scaling):
        * loop_filtered(): classify each packet in C and invoke the callback only for admitted
          classes; provably-inert noise never builds a Python object. Generic profile (0=OTHER,
          1=FLOW_HEAD, 2=SET_MATCH) and a built-in security profile (profile=1).
        * loop_to_buffer(): same classification, GIL released for the whole loop, writes admitted
          packets into a shared buffer for parallel worker draining (no per-packet Python).
        * filtered_stats(): live per-class counter snapshot, pollable from another thread.
        * next_batch(): capture up to N packets in one call (amortized C<->Python boundary).
        * set_fanout(group_id, fanout_type=PACKET_FANOUT_HASH) + PACKET_FANOUT_* constants:
          join a live capture to a Linux kernel PACKET_FANOUT group to scale capture across
          multiple sockets/threads on one interface (flow-hashed, no duplicate capture).
        * Classic Reader API (loop/next/dispatch/setfilter/...) unchanged and backward compatible.

2018-06-17 Alberto Solino <asolino@coresecurity.com>
    * Version 0.11.4 tagged with the following changes
        * bpfobject support get_bpf method (by @palaviv)
        * Monitor mode support & missing methods fix (by @gpotter2)
        * Documentation update (@gpotter2)

2018-03-26 Alberto Solino <asolino@coresecurity.com>
    * Version 0.11.2 tagged with the following substantial changes (since version 0.11.11):
        * Exporting pcap_get_selectable_fd as getfd (by @geekhckr)
        * Add a close method & context manager to Reader (by @segevfiner)

2017-01-16 Martin Balao <mbalao@coresecurity.com>
    * Version 0.11.1 tagged with the following changes (since version 0.10.10):
        * AppVeyor integration (continuous integration service)
         * @takluyver contribution
        * Close method for Pcap Dumper
         * @JinBlack contribution
        * Pcap stats added
         * @duggan contribution

2015-05-19  Andres Blanco <ablanco@coresecurity.com>
    * Added sendpacket support by default

2010-08-25  Ezequiel Gutesman <gutes@coresecurity.com>
    * removed check for pcap_sendpacket function

2010-07-30  Ezequiel Gutesman <gutes@coresecurity.com>
    * pcapy.cc: fixed bug in initpcapy,  Pkthdr_type.ob_type and Pdumpertype.ob_type were not set. See http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=589956 (reported by Piotr Lewandowski)

2007-03-27  Max Caceres <max@coresecurity.com>
    * pcapobj.cc: wrapped pcap_sendpacket for sending packets in all platforms.

2005-12-09  Max Caceres <max@coresecurity.com>
    * pcapy.cc: open_live doesn't raise an exception anymore when network/netmask information is not available (i.e. when sniffing on devices without an assigned IP address). Reported by Scott Raynel.

2005-09-14  Max Caceres <max@coresecurity.com>
    * pcapobj.cc: fixed bug where exceptions thrown inside a callback where not handled properly. Fix relies on fairly new pcap_breakloop function.
    * pcapy.cc: in Windows uses findalldevs() packaged with new Winpcap 3.1

2005-08-15  Max Caceres <max@coresecurity.com>
    * pcapy.cc: fixed bug where getnet() and getmask() always returned 0.0.0.0 (reported by Jeff Connelly)

2005-07-28  Max Caceres <max@coresecurity.com>
    * pcapobj.cc: fixed a memory leak in PythonCallback (reported by fraca7 _at_ free.fr).

2004-01-05  Javier Kohen  <jkohen@coresecurity.com>
    * setup.py: force linking with G++ when using GCC, to avoid a missing symbol in some setups.

2003-11-28  Javier Kohen  <jkohen@coresecurity.com>
    * dcerpc_v4.py: Fixed self.bind variable having the same name than a method.
