Adrien Beraud
1db8abb7fc
c: align hash structs with native types
2026-10-26 23:57:50 -04:00
Adrien Beraud
3f7b1bc3f5
tests: cover unaligned C hash storage
2026-10-26 23:56:59 -04:00
Adrien Beraud
019c25633e
tests: initialize GnuTLS for MSVC C bindings
2026-10-26 23:56:43 -04:00
Adrien Beraud
8193f43593
tests: cover Node runner collection cancellation and queue overflow
2026-10-26 23:54:00 -04:00
Adrien Beraud
39564f14c1
tests: define Node-API binding lifecycle and loopback contracts
2026-10-26 23:54:00 -04:00
Adrien Beraud
83778d84fe
rust: update edition to 2024
...
Update the Rust edition to 2024 and mark the FFI extern block as unsafe.
2026-10-26 09:57:02 -04:00
Adrien Beraud
b61ee620e4
dht: schedule projected gets with matching reuse rules
2026-10-26 09:21:10 -04:00
Adrien Beraud
0d120eb5d4
tests: cover projected query request scheduling
2026-10-26 09:21:10 -04:00
Cyrille Béraud and Copilot
9b9056c0c8
dht: do not report unfiltered answers to filtered queries
...
Query::isSatisfiedBy() considers an unfiltered answer sufficient for a
filtered query, which is true for a vanilla get: onGetValuesDone() applies
the operation filter to the values before calling back.
A projected query is different. It receives the fields another query selected
and can no longer evaluate its own filters on them, all the more so as those
filters may target fields that were not selected at all. Two concurrent
queries such as "SELECT id" and "SELECT id WHERE value_type=1" therefore made
the filtered callback report identifiers whose type does not match, and
searchNodeGetDone() additionally cancelled its own request so it never got a
correctly filtered answer.
Add Query::isProjectionSatisfiedBy(), which additionally requires both queries
to apply the same filters, and use it for operations with a query callback.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-10-26 09:21:10 -04:00
Cyrille Béraud and Copilot
bf8e3ea251
value: compare field values in FieldValueIndex::containedIn
...
containedIn() only checked that the other index declared the same field
keys, never that they held the same values, contradicting its documented
contract of containment "with the same value".
Dht::query() uses containedIn() to deduplicate projected results. Because
every result of a given query shares the same projection schema, any two
results compared equal: the first one suppressed all the later ones, and the
"lesser" branch even erased the already reported result. A query selecting a
field therefore reported a single value regardless of how many matched.
Compare the FieldValue as well, and add a regression covering distinct
values, equal indexes and a narrower projection contained in a wider one.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com >
2026-10-26 09:21:10 -04:00
Adrien Beraud
34eb86a119
value: support sequence numbers in wire filters
2026-10-26 09:19:57 -04:00
Adrien Beraud
75c789ceb2
rust: cover sequence filters across loopback nodes
2026-10-26 09:15:36 -04:00
Adrien Beraud
da438d1bd2
value: reproduce sequence filter serialization failure
2026-10-26 09:12:12 -04:00
Adrien Beraud
44e67e1389
rust: parse hexadecimal hashes with string length checks
2026-10-26 09:11:42 -04:00
Adrien Beraud
7f9126b3b0
rust: cover empty and short hexadecimal hashes
2026-10-26 09:10:39 -04:00
Adrien Beraud
574674d3a2
rust: own native pointers in movable handle wrappers
2026-10-26 09:10:16 -04:00
Adrien Beraud
c60703bfc3
rust: cover moves across native handle types
2026-10-26 09:10:16 -04:00
Adrien Beraud
a0220827cd
rust: reproduce moving native values out of boxes
2026-10-26 09:08:03 -04:00
Adrien Beraud
fb90211157
python: expose value state and harden runner operations
2026-10-26 01:10:34 -04:00
Adrien Beraud
9501465293
python: cover value state and binding safety regressions
2026-10-26 01:06:48 -04:00
Adrien Beraud
95bd26c3be
rust: bump version to 0.2.0 and add author
2026-10-26 00:51:27 -04:00
Adrien Beraud
87463c2d6c
rust: own callbacks and expose safe native binding APIs
2026-10-26 00:51:27 -04:00
Adrien Beraud
baf413dd0d
c: expose lifecycle queries crypto and callback ownership
2026-10-26 00:51:27 -04:00
Adrien Beraud
6bf01f3b6d
runner: release status callback captures on join
2026-10-26 00:51:27 -04:00
Adrien Beraud
852403fbeb
crypto: verify signatures using the public key algorithm
2026-10-26 00:51:27 -04:00
Adrien Beraud
5f6d5c769e
rust: reject certificate registration on stopped runners
2026-10-26 00:51:27 -04:00
Adrien Beraud
42e4419b75
bindings: verify retained values and queued push delivery
2026-10-26 00:51:27 -04:00
Adrien Beraud
4e94d123b2
rust: cover threaded crypto and native callback teardown
2026-10-26 00:51:27 -04:00
Adrien Beraud
7f3f1b4ec4
rust: cover filtered queries and extension hooks
2026-10-26 00:51:27 -04:00
Adrien Beraud
6d462c0dbf
rust: cover callback ownership and binding error paths
2026-10-26 00:51:27 -04:00
Adrien Beraud
0285acc766
c: cover lifecycle progress and crypto persistence APIs
2026-10-26 00:51:27 -04:00
Adrien Beraud
0626e82f4a
c: contain crypto generation failures and run binding regressions
2026-10-26 00:51:27 -04:00
Adrien Beraud
aa01f68cb5
c: cover binding ownership and invalid crypto input
2026-10-26 00:51:27 -04:00
Adrien Beraud
af3fd618bf
python: expose observability and projected query APIs
2026-10-26 00:51:27 -04:00
Adrien Beraud
b96bdfbf04
python: cover observability and querying APIs
2026-10-26 00:51:27 -04:00
Adrien Beraud
60ca85f782
python: release native resources and guard callback cleanup
2026-10-26 00:51:27 -04:00
Adrien Beraud
e4966aa457
python: cover native resource and callback cleanup regressions
2026-10-26 00:51:27 -04:00
Adrien Beraud
aa9d23870b
python: guard native errors, iterator lifetimes, and hash bounds
2026-10-26 00:51:27 -04:00
Adrien Beraud
ac68db84eb
python: cover binding exception and memory safety regressions
2026-10-26 00:51:27 -04:00
Adrien Beraud
bbbd9122af
python: use loopback addresses in bootstrap test
2026-10-26 00:51:27 -04:00
Adrien Beraud
cf58d66282
python: expose node state persistence configuration
2026-10-26 00:51:27 -04:00
Adrien Beraud
2ddf1e5ec5
python: await shutdown before checking persisted state
2026-10-26 00:51:27 -04:00
Adrien Beraud
e48bfd578a
python: cover node state persistence configuration
2026-10-26 00:51:27 -04:00
Adrien Beraud
1c3fc22c31
meson: install Python bindings as opendht package
2026-10-26 00:51:27 -04:00
Adrien Beraud
b6cf2fd246
python: expose key persistence and value metadata
2026-10-26 00:51:27 -04:00
Adrien Beraud
91c3f62c0c
python: validate restored keys through certificate chains
2026-10-26 00:51:27 -04:00
Adrien Beraud
2703cf129d
python: cover key persistence and value metadata
2026-10-26 00:51:27 -04:00
Adrien Beraud
51c2aadd4e
python: handle cancelled and repeated async completions
2026-10-26 00:51:27 -04:00
Adrien Beraud
8b20e912d6
docker: use alpine 3.24 runtime
2026-10-26 00:51:27 -04:00
Adrien Beraud
b66ff83fe2
python: preserve permanence in blocking puts
2026-10-26 00:51:27 -04:00