Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
102 commits
Select commit Hold shift + click to select a range
02de760
Added heuristics file content detector that determines the content ba…
Dimi1010 Sep 12, 2025
d2b6339
Merge remote-tracking branch 'upstream/dev' into feature/heuristic-fi…
Dimi1010 Sep 12, 2025
685dd9f
Moved stream checkpoint outside format detector as it is not directly…
Dimi1010 Sep 12, 2025
40dee69
Added a new factory function `createReader` that uses the new heurist…
Dimi1010 Sep 12, 2025
f1e3e18
Add <algorithm> include.
Dimi1010 Sep 12, 2025
8da1790
Added unit tests.
Dimi1010 Sep 12, 2025
3ad51e2
Deprecated old factory function.
Dimi1010 Sep 12, 2025
15c2000
Add byte-swapped zstd magic number.
Dimi1010 Sep 12, 2025
17af8d4
Lint
Dimi1010 Sep 12, 2025
46418ec
Move enum closer to first usage.
Dimi1010 Sep 12, 2025
3d713ab
Added unit tests for file reader device factory.
Dimi1010 Sep 15, 2025
a2391ec
Revert indentation.
Dimi1010 Sep 15, 2025
ea328d7
Fixed StreamCheckpoint to restore original stream state.
Dimi1010 Sep 15, 2025
db86c3e
Merge branch 'dev' into feature/heuristic-file-selection
Dimi1010 Sep 15, 2025
4aed9bd
Merge branch 'dev' into feature/heuristic-file-selection
Dimi1010 Sep 20, 2025
a83ae2b
Moved isStreamSeekable helper to inside `CaptureFileFormatDetector`.
Dimi1010 Sep 20, 2025
916e872
Added pcap magic number for Alexey Kuznetzov's modified pcap format.
Dimi1010 Sep 20, 2025
022529f
Merge remote-tracking branch 'upstream/dev' into feature/heuristic-fi…
Dimi1010 Sep 26, 2025
169fcd2
Split the unit test into multiple smaller tests.
Dimi1010 Sep 26, 2025
db8c848
Merge branch 'dev' into feature/heuristic-file-selection
Dimi1010 Oct 2, 2025
3e74912
Merge remote-tracking branch 'upstream/dev' into feature/heuristic-fi…
Dimi1010 Oct 2, 2025
f1613c4
Added helper to indicate if ZstSupport is enabled for PcapNg devices.
Dimi1010 Oct 2, 2025
bc2bacd
Split pcap microsecond and nanosecond file heuristics tests.
Dimi1010 Oct 2, 2025
58ac45d
Skipping Zst test case if zst is not supported.
Dimi1010 Oct 2, 2025
3b4b5ad
Due to file heuristics returning PcapNG format on Zstd archive, if Zs…
Dimi1010 Oct 2, 2025
18379b4
Lint
Dimi1010 Oct 2, 2025
8a4f6f8
Added invalid device factory to pcap tag.
Dimi1010 Oct 2, 2025
7776e0e
Updated static zst archives to be actual archives.
Dimi1010 Oct 2, 2025
4f52f59
Centralized PTF test name width under a macro.
Dimi1010 Oct 3, 2025
88ebfff
Add Pcap++Test header files to test sources for IDE tooling.
Dimi1010 Oct 3, 2025
41fe188
Fixed test output formatting.
Dimi1010 Oct 3, 2025
c8ae4f8
Lint
Dimi1010 Oct 3, 2025
c7cab2b
Typo fix.
Dimi1010 Oct 3, 2025
6d55077
Merge remote-tracking branch 'upstream/dev' into feature/heuristic-fi…
Dimi1010 Oct 6, 2025
682eeac
Shortened test names.
Dimi1010 Oct 6, 2025
07804da
Simplified invalid file test.
Dimi1010 Oct 6, 2025
9c4fc08
Simplified ZST tests.
Dimi1010 Oct 6, 2025
d975157
Added snoop test.
Dimi1010 Oct 7, 2025
40530df
Expanded granularity of file format detection.
Dimi1010 Oct 7, 2025
96a61b2
Marked `checkSupport` functions as constexpr to enable compile time o…
Dimi1010 Oct 7, 2025
55a6b7a
Exclude json from pre-commit cppcheck as it is slow due to many defin…
Dimi1010 Oct 7, 2025
3ab14e7
Lint
Dimi1010 Oct 7, 2025
5dd9a30
Fix runtime side effects inside constexpr function.
Dimi1010 Oct 7, 2025
45ad769
Added a secondary factory function to separate mixed error handling m…
Dimi1010 Oct 7, 2025
d24a9ad
Revert deprecation message, as doxygen is unhappy.
Dimi1010 Oct 7, 2025
f5ff879
Update tests.
Dimi1010 Oct 7, 2025
2c1b2c4
Update deprecation warning to point to the function closer to the sig…
Dimi1010 Oct 7, 2025
8d1ed1d
Catch general exception instead of runtime error.
Dimi1010 Oct 7, 2025
0ea2da9
Shortened deprecation message due to pre-commit warnings when its is …
Dimi1010 Oct 7, 2025
c209c90
Fix braces.
Dimi1010 Oct 9, 2025
8d77aa0
Simplfy test.
Dimi1010 Oct 9, 2025
af12d2f
Added tests for createReader failures.
Dimi1010 Oct 9, 2025
b357087
Merge branch 'dev' into feature/heuristic-file-selection
Dimi1010 Oct 10, 2025
443c883
Simplified pcap detection to not require to read the entire pcap header.
Dimi1010 Oct 11, 2025
202d5cc
Added const qualifiers to detector methods.
Dimi1010 Oct 11, 2025
e6b2aa9
Added dedicated unit tests for CaptureFileFormatDetector.
Dimi1010 Oct 11, 2025
b8fb635
Added more tests for `createReader`.
Dimi1010 Oct 11, 2025
c6c7720
Add static assert for array indice checks.
Dimi1010 Oct 11, 2025
181a8b4
Updated detectPcap selection.
Dimi1010 Oct 18, 2025
76aa850
Merge branch 'dev' into feature/heuristic-file-selection
Dimi1010 Oct 18, 2025
d8f7419
Extracted capture format detector to remove it from publicly availabl…
Dimi1010 Oct 18, 2025
91a7a0a
Fix includes.
Dimi1010 Oct 18, 2025
e275950
Removed duplicate files from tracking.
Dimi1010 Oct 18, 2025
e7a42b5
Lint
Dimi1010 Oct 18, 2025
54f7bae
Trimmed pcapng sample.
Dimi1010 Oct 18, 2025
93cba3d
Merge branch 'dev' into feature/heuristic-file-selection
Dimi1010 Oct 24, 2025
3643fac
Change PcapNGZst to ZstArchive. Zst to PcapNG branch folding is done …
Dimi1010 Oct 24, 2025
ec5980f
Added separate format value for "modified" pcap to separate the forma…
Dimi1010 Oct 24, 2025
b3639a9
Docs fix.
Dimi1010 Oct 24, 2025
ce561b9
Merge branch 'dev' into feature/heuristic-file-selection
Dimi1010 Nov 15, 2025
6322b41
Merge branch 'dev' into feature/heuristic-file-selection
Dimi1010 Nov 23, 2025
ae9caa8
Add automatic open functionality to `createReader` factory to mimic R…
Dimi1010 Nov 23, 2025
956b596
Merge branch 'dev' into feature/heuristic-file-selection
Dimi1010 Nov 23, 2025
5275349
Update docstring.
Dimi1010 Nov 23, 2025
a15f529
Fix exception message assert.
Dimi1010 Nov 23, 2025
385528c
Merge remote-tracking branch 'upstream/dev' into feature/heuristic-fi…
Dimi1010 Dec 7, 2025
9f5b5f1
Merge remote-tracking branch 'upstream/dev' into feature/heuristic-fi…
Dimi1010 Dec 10, 2025
b0674bd
Refactored format tests to utilize the createReader factory.
Dimi1010 Dec 10, 2025
e614176
Fix nanoprecision test issues.
Dimi1010 Dec 11, 2025
bb9917b
Remove openDevice flag. Update create procedure to avoid exceptions o…
Dimi1010 Dec 30, 2025
9a2a390
Docs update + Lint
Dimi1010 Dec 30, 2025
df0a5a8
Docs fix.
Dimi1010 Dec 30, 2025
92c80d9
Lint.
Dimi1010 Dec 30, 2025
692df58
Merge remote-tracking branch 'upstream/dev' into feature/heuristic-fi…
Dimi1010 Jan 17, 2026
fdf8c89
Remove nano support checks as it should always be supported by the in…
Dimi1010 Jan 17, 2026
5a62e9b
Merge remote-tracking branch 'upstream/dev' into feature/heuristic-fi…
Dimi1010 Feb 20, 2026
1f1fb30
Merge remote-tracking branch 'upstream/dev' into feature/heuristic-fi…
Dimi1010 Feb 24, 2026
2b24c24
Extend format detector to capture byte order from magic number.
Dimi1010 Feb 24, 2026
5024f9e
Add initial merge logic.
Dimi1010 Feb 24, 2026
d1640cb
Add methods to check magic numbers directly.
Dimi1010 Feb 24, 2026
a18e3dd
Merge remote-tracking branch 'upstream/dev' into feature/heuristic-fi…
Dimi1010 Mar 4, 2026
68fb476
Comment out unused variables.
Dimi1010 Mar 4, 2026
d9f6f0f
Merge branch 'dev' into feature/heuristic-file-selection
Dimi1010 Mar 12, 2026
a535316
Add helper to convert format to pcap precision.
Dimi1010 Mar 16, 2026
4d70c43
Merge remote-tracking branch 'upstream/dev' into feature/heuristic-fi…
Dimi1010 Apr 9, 2026
ec8fa93
Simplify code.
Dimi1010 Apr 9, 2026
0600890
Fixed errors.
Dimi1010 Apr 9, 2026
b16b932
Disable pcap "modified" file format detection tests.
Dimi1010 Apr 9, 2026
c7eff8a
Lint
Dimi1010 Apr 9, 2026
d880e04
Merge branch 'dev' into feature/heuristic-file-selection
Dimi1010 Apr 27, 2026
334537a
Merge branch 'dev' into feature/heuristic-file-selection
Dimi1010 May 4, 2026
df3f15f
Merge branch 'dev' into feature/heuristic-file-selection
Dimi1010 May 9, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
exclude: '.*\.(pcap|pcapng|dat)|(PacketExamples|PcapExamples|expected_output|pcap_examples).*\.txt'
exclude: '.*\.(pcap|pcapng|dat)|(PacketExamples|PcapExamples|expected_output|pcap_examples).*\.(txt|zst|zstd)'
fail_fast: false
repos:
- repo: local
Expand Down Expand Up @@ -37,6 +37,7 @@ repos:
files: ^(Common\+\+|Packet\+\+|Pcap\+\+|Tests|Examples)/.*\.(cpp|h)$
- id: cppcheck
args: ["--std=c++14", "--language=c++", "--suppressions-list=cppcheckSuppressions.txt", "--inline-suppr", "--force"]
exclude: ^3rdParty/json
- repo: https://github.com/BlankSpruce/gersemi
rev: 0.26.1
hooks:
Expand Down
1 change: 1 addition & 0 deletions Pcap++/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ target_link_libraries(
)

if(LIGHT_PCAPNG_ZSTD)
target_compile_definitions(Pcap++ PRIVATE -DPCPP_PCAPNG_ZSTD_SUPPORT)
target_link_libraries(Pcap++ PRIVATE light_pcapng)
endif()

Expand Down
33 changes: 33 additions & 0 deletions Pcap++/header/PcapFileDevice.h
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,32 @@ namespace pcpp
/// it returns an instance of PcapFileReaderDevice
/// @param[in] fileName The file name to open
/// @return An instance of the reader to read the file. Notice you should free this instance when done using it
/// @deprecated Prefer `createReader` or `tryCreateReader` due to selection of reader based on file content
/// instead of extension.
PCPP_DEPRECATED("Prefer `tryCreateReader` due to selection of reader based on file content.")
static IFileReaderDevice* getReader(const std::string& fileName);

/// @brief Creates an instance of the reader best fit to read the file.
///
/// The factory function uses heuristics based on the file content to decide the reader.
/// If the file type is known at compile time, it is better to construct a concrete reader instance directly.
///
/// @param[in] fileName The path to the file to open.
/// @return A unique pointer to a reader instance
/// @throws std::runtime_error If the file could not be opened or is of unsupported format.
/// @remarks The device is not opened automatically. Call `open()` on the returned device before using it.
static std::unique_ptr<IFileReaderDevice> createReader(const std::string& fileName);

/// @brief Tries to create an instance of the reader best fit to read the file.
///
/// The factory function uses heuristics based on the file content to decide the reader.
/// If the file type is known at compile time, it is better to construct a concrete reader instance directly.
///
/// @param fileName The path to the file to open.
/// @return A unique pointer to a reader instance, or nullptr if the file could not be opened or is of
/// unsupported format.
/// @remarks The device is not opened automatically. Call `open()` on the returned device before using it.
static std::unique_ptr<IFileReaderDevice> tryCreateReader(const std::string& fileName);
};

/// @class IFileWriterDevice
Expand Down Expand Up @@ -324,6 +349,10 @@ namespace pcpp
internal::LightPcapNgHandle* m_LightPcapNg;

public:
/// @brief A static method that checks if the device was built with zstd compression support
/// @return True if zstd compression is supported, false otherwise.
static bool isZstdSupported();

/// A constructor for this class that gets the pcap-ng full path file name to open. Notice that after calling
/// this constructor the file isn't opened yet, so reading packets will fail. For opening the file call open()
/// @param[in] fileName The full path of the file to read
Expand Down Expand Up @@ -409,6 +438,10 @@ namespace pcpp
int m_CompressionLevel;

public:
/// @brief A static method that checks if the device was built with zstd compression support.
/// @return True if zstd compression is supported, false otherwise.
static bool isZstdSupported();

/// A constructor for this class that gets the pcap-ng full path file name to open for writing or create. Notice
/// that after calling this constructor the file isn't opened yet, so writing packets will fail. For opening the
/// file call open()
Expand Down
Loading
Loading