blob: 951bbaed937c6ee3af1d64bfa6144bb388c6c96e (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
# Varlink with Vali
[varlink][1] is a neat little standard for doing debuggable IPC. It takes some
of the nice properties of DBUS, like the introspection capabilities, and
combines them with simple standard tools/technologies in the form of unix
sockets and JSON.
For C, there is a library by [emersion][2] called vali, which does pretty much
everything all you need to get going:
https://emersion.fr/blog/2025/announcing-vali/
When you have written your service, here is how to interact with it just using
standard utils, socat and jq:
```sh
cat <<-EOF | jq --raw-output0 | socat STDIO UNIX-CONNECT:"$SOCKET" | jq
{
"method": "org.varlink.service.GetInfo",
}
EOF
```
This is equivalent to using the varlink cli tool and running:
`varlink info $SOCKET`
```sh
cat <<-EOF | jq --raw-output0 | socat STDIO UNIX-CONNECT:"$SOCKET" | jq
{
"method": "org.varlink.service.GetInterfaceDescription",
"parameters": {
"interface": "com.example.Foobar"
}
}
EOF
```
This will return the service interface, if the service listening at the socket
actually implements it.
Note the use of `jq --raw-output0`. It is possible to omit the jq invocations,
the input JSON data should be followed by a NUL byte.
[1]: https://varlink.org
[2]: https://emersion.fr
|