summaryrefslogtreecommitdiff
path: root/apt-private
diff options
context:
space:
mode:
authorJulian Andres Klode <jak@debian.org>2024-11-14 14:38:32 +0000
committerJulian Andres Klode <jak@debian.org>2024-11-14 14:38:32 +0000
commit8f10ee850db3892bc979694864451be3a73ad1e8 (patch)
treeaeba69638c2ca12db4846eea1bf2eb44e1432b1d /apt-private
parent8fd0ebc330bcdbced85877ff48bf40582bf983f9 (diff)
parentd936557579090fa7a5ce7edaebc61f55b3fa3ab8 (diff)
Merge branch 'json-config' into 'main'
JSON: Pass options to hooks in hello message See merge request apt-team/apt!389
Diffstat (limited to 'apt-private')
-rw-r--r--apt-private/private-json-hooks.cc34
1 files changed, 33 insertions, 1 deletions
diff --git a/apt-private/private-json-hooks.cc b/apt-private/private-json-hooks.cc
index 58185181e..6169488f6 100644
--- a/apt-private/private-json-hooks.cc
+++ b/apt-private/private-json-hooks.cc
@@ -350,11 +350,43 @@ static void NotifyHook(std::ostream &os, std::string const &method, const char *
jsonWriter.endObject(); // main
}
+static JsonWriter &BuildOptionsArray(JsonWriter &writer)
+{
+ const Configuration::Item *Top = _config->Tree(nullptr);
+ if (Top == 0)
+ return writer.beginArray().endArray();
+
+ writer.beginArray();
+ do
+ {
+ if (not Top->Value.empty())
+ writer.beginObject().name("name").value(Top->FullTag()).name("value").value(Top->Value).endObject();
+ if (Top->Child != 0)
+ {
+ Top = Top->Child;
+ continue;
+ }
+
+ while (Top != 0 && Top->Next == 0)
+ Top = Top->Parent;
+ if (Top != 0)
+ Top = Top->Next;
+
+ } while (Top != 0);
+
+ writer.endArray();
+
+ return writer;
+}
+
/// @brief Build the hello handshake message for 0.1 protocol
static std::string BuildHelloMessage()
{
std::stringstream Hello;
- JsonWriter(Hello).beginObject().name("jsonrpc").value("2.0").name("method").value("org.debian.apt.hooks.hello").name("id").value(0).name("params").beginObject().name("versions").beginArray().value("0.1").value("0.2").endArray().endObject().endObject();
+ auto writer = JsonWriter(Hello).beginObject().name("jsonrpc").value("2.0").name("method").value("org.debian.apt.hooks.hello").name("id").value(0).name("params").beginObject().name("versions").beginArray().value("0.1").value("0.2").endArray().name("options");
+
+ BuildOptionsArray(writer);
+ writer.endObject().endObject();
return Hello.str();
}