]> git.ipfire.org Git - thirdparty/systemd.git/commit
sd-json: add JsonStream transport-layer module and migrate sd-varlink main
authorDaan De Meyer <daan@amutable.com>
Thu, 9 Apr 2026 14:54:21 +0000 (14:54 +0000)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Fri, 10 Apr 2026 18:04:12 +0000 (20:04 +0200)
commit6b1a59d59426cdda56648b00394addde2d454418
tree03d0c401f7cc09bc339f2a507304666496b3addc
parenta1813a40ec77985d975b635653ae924c16afa1b6
sd-json: add JsonStream transport-layer module and migrate sd-varlink

Introduces JsonStream, a generic transport layer for JSON-line message
exchange over a pair of file descriptors. It owns the input/output
buffers, SCM_RIGHTS fd passing, the deferred output queue, the
read/write/parse step functions, sd-event integration (input/output/time
event sources), the idle timeout machinery, and peer credential caching,
but knows nothing about the specific JSON protocol on top — the consumer
drives its state machine via phase/dispatch callbacks supplied at
construction.

sd-varlink is reworked to delegate the entire transport layer to a
JsonStream owned by sd_varlink. The varlink struct drops every
transport-related field (input/output buffers and fds, output queue,
fd-passing state, ucred/pidfd cache, prefer_read/write fallback, idle
timeout, description, event sources) — all of that lives in JsonStream
now. What remains in sd_varlink is the varlink-protocol state machine
(state, n_pending, current/previous/sentinel, server linkage, peer
credentials accounting, exec_pidref, the varlink-specific quit and defer
sources) and a thin wrapper layer over the JsonStream API. The
should_disconnect / get_timeout / get_events / wait helpers all live in
JsonStream now and are driven by a JsonStreamPhase the consumer reports
via its phase callback.
src/libsystemd/meson.build
src/libsystemd/sd-json/json-stream.c [new file with mode: 0644]
src/libsystemd/sd-json/json-stream.h [new file with mode: 0644]
src/libsystemd/sd-varlink/sd-varlink.c
src/libsystemd/sd-varlink/varlink-internal.h