about summary refs log tree commit diff
path: root/site/varlink.html
diff options
context:
space:
mode:
Diffstat (limited to 'site/varlink.html')
-rw-r--r--site/varlink.html80
1 files changed, 80 insertions, 0 deletions
diff --git a/site/varlink.html b/site/varlink.html
new file mode 100644
index 0000000..184fdb3
--- /dev/null
+++ b/site/varlink.html
@@ -0,0 +1,80 @@
+<!-- Generated file, do not edit, you may edit and discard src/inc/varlink.htm :) -->
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8">
+<meta name="thumbnail" content="/media/services/thumbnail.jpg">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<link rel="preload" href="media/interface/logo.svg" as="image">
+<link rel="alternate" type="application/rss+xml" title="RSS Feed" href="/links/rss.xml">
+<link rel="stylesheet" type="text/css" href="/links/main.css">
+<link rel="shortcut icon" type="image/png" href="/media/services/icon.png">
+<link rel="license" href="https://git.sr.ht/~robertgzr/site/blob/master/LICENSE.content">
+<title>gzr.im &mdash; varlink</title>
+</head>
+<body>
+<header>
+<a href="/"><img src="/media/interface/logo.svg" alt="gzr.im"></a>
+<nav>
+<section>
+    <ul class="nobull capital">
+        <li><a href="/site/about.html">about</a></li>
+        <li><a href="/site/notes.html">notes</a></li>
+        <li><a href="/site/2025.html">2025</a></li>
+    </ul>
+</section>
+<section>
+    <ul class="nobull capital">
+        <li><a href="/site/books.html">books</a></li>
+        <li><a href="/site/like.html">like</a></li>
+    </ul>
+</section>
+</nav>
+</header>
+<main>
+<!-- Generated file, you may edit and discard varlink.md :) -->
+<p><a href="https://varlink.org" target="_blank">varlink</a> 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.</p>
+<p>For C, there is a library by <a href="https://emersion.fr"
+target="_blank">emersion</a> called vali, which does pretty much all you
+need to get going: <a
+href="https://emersion.fr/blog/2025/announcing-vali/" class="uri"
+target="_blank">https://emersion.fr/blog/2025/announcing-vali/</a></p>
+<p>When you have written your service, here is how to interact with it
+just using standard utils, socat and jq:</p>
+<div class="sourceCode" id="cb1"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="fu">cat</span> <span class="op">&lt;&lt;-EOF</span> <span class="kw">|</span> <span class="ex">jq</span> <span class="at">--raw-output0</span> <span class="kw">|</span> <span class="ex">socat</span> STDIO UNIX-CONNECT:<span class="st">&quot;</span><span class="va">$SOCKET</span><span class="st">&quot;</span> <span class="kw">|</span> <span class="ex">jq</span></span>
+<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a><span class="st">    {</span></span>
+<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a><span class="st">        &quot;method&quot;: &quot;org.varlink.service.GetInfo&quot;,</span></span>
+<span id="cb1-4"><a href="#cb1-4" aria-hidden="true" tabindex="-1"></a><span class="st">    }</span></span>
+<span id="cb1-5"><a href="#cb1-5" aria-hidden="true" tabindex="-1"></a><span class="op">EOF</span></span></code></pre></div>
+<p>This is equivalent to using the varlink cli tool and running:
+<code>varlink info $SOCKET</code></p>
+<div class="sourceCode" id="cb2"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="fu">cat</span> <span class="op">&lt;&lt;-EOF</span> <span class="kw">|</span> <span class="ex">jq</span> <span class="at">--raw-output0</span> <span class="kw">|</span> <span class="ex">socat</span> STDIO UNIX-CONNECT:<span class="st">&quot;</span><span class="va">$SOCKET</span><span class="st">&quot;</span> <span class="kw">|</span> <span class="ex">jq</span></span>
+<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a><span class="st">    {</span></span>
+<span id="cb2-3"><a href="#cb2-3" aria-hidden="true" tabindex="-1"></a><span class="st">        &quot;method&quot;: &quot;org.varlink.service.GetInterfaceDescription&quot;,</span></span>
+<span id="cb2-4"><a href="#cb2-4" aria-hidden="true" tabindex="-1"></a><span class="st">        &quot;parameters&quot;: {</span></span>
+<span id="cb2-5"><a href="#cb2-5" aria-hidden="true" tabindex="-1"></a><span class="st">            &quot;interface&quot;: &quot;com.example.Foobar&quot;</span></span>
+<span id="cb2-6"><a href="#cb2-6" aria-hidden="true" tabindex="-1"></a><span class="st">        }</span></span>
+<span id="cb2-7"><a href="#cb2-7" aria-hidden="true" tabindex="-1"></a><span class="st">    }</span></span>
+<span id="cb2-8"><a href="#cb2-8" aria-hidden="true" tabindex="-1"></a><span class="op">EOF</span></span></code></pre></div>
+<p>This will return the service interface (if the service listening at
+the socket actually implements it.</p>
+<p>Note the use of <code>jq --raw-output0</code>. It is possible to omit
+the jq invocations, the input JSON data should be followed by a NUL
+byte.</p>
+</main>
+<footer>
+Edited on 1970-01-01 <a href="https://git.sr.ht/~robertgzr/site/tree/master/src/inc/varlink.htm" target="_blank">[src]</a>
+<a href="mailto:~robertgzr/public-inbox@lists.sr.ht">[comments]</a>
+<br>
+<b>robertgzr</b>
+&copy; 2025
+&mdash;
+<a href="https://git.sr.ht/~robertgzr/site/blob/master/LICENSE.content" target="_blank">BY-NC-SA 4.0</a>
+</footer>
+<a href="#top">[&#9206;]</a>
+</body>
+</html>