From 072ebba1de115cb31a71f6398c17a1bfdb383ee8 Mon Sep 17 00:00:00 2001
From: Tomas Pecka <peckato1@users.noreply.github.com>
Date: Thu, 9 Sep 2021 09:19:05 +0200
Subject: [PATCH 4/9] varlink: Implement varlink_observe_complete

In some cases one doesn't want to run the sd_event loop just to obtain
results from varlink replies in the "continues" mode.

The new function (`varlink_observe_complete`) runs the varlink process
mode on the client side synchronously and returns when no more replies
are expected.
This is similar to the behavior seen in the `varlink_call` function.
---
 src/shared/varlink.c | 31 +++++++++++++++++++++++++++++++
 src/shared/varlink.h |  1 +
 2 files changed, 32 insertions(+)

diff --git a/src/shared/varlink.c b/src/shared/varlink.c
index e0038dfd28..7e5c9657f8 100644
--- a/src/shared/varlink.c
+++ b/src/shared/varlink.c
@@ -1440,6 +1440,37 @@ int varlink_observeb(Varlink *v, const char *method, ...) {
         return varlink_observe(v, method, parameters);
 }
 
+int varlink_observe_complete(Varlink *v) {
+        int r;
+
+        while (v->state == VARLINK_AWAITING_REPLY_MORE) {
+                r = varlink_process(v);
+                if (r < 0)
+                        return r;
+                if (r > 0)
+                        continue;
+
+                r = varlink_wait(v, USEC_INFINITY);
+                if (r < 0)
+                        return r;
+        }
+
+        switch (v->state) {
+        case VARLINK_IDLE_CLIENT:
+                return 1;
+
+        case VARLINK_PENDING_DISCONNECT:
+        case VARLINK_DISCONNECTED:
+                return varlink_log_errno(v, SYNTHETIC_ERRNO(ECONNRESET), "Connection was closed.");
+
+        case VARLINK_PENDING_TIMEOUT:
+                return varlink_log_errno(v, SYNTHETIC_ERRNO(ETIME), "Connection timed out.");
+
+        default:
+                assert_not_reached();
+        }
+}
+
 int varlink_call(
                 Varlink *v,
                 const char *method,
diff --git a/src/shared/varlink.h b/src/shared/varlink.h
index 66a1ff630e..9bc836e1f9 100644
--- a/src/shared/varlink.h
+++ b/src/shared/varlink.h
@@ -92,6 +92,7 @@ int varlink_invokeb(Varlink *v, const char *method, ...);
 /* Enqueue method call, expect a reply now, and possibly more later, which are all delivered to the reply callback */
 int varlink_observe(Varlink *v, const char *method, JsonVariant *parameters);
 int varlink_observeb(Varlink *v, const char *method, ...);
+int varlink_observe_complete(Varlink *v);
 
 /* Enqueue a final reply */
 int varlink_reply(Varlink *v, JsonVariant *parameters);
-- 
2.35.1

