resolvectl: add SVCB and HTTPS json format
This commit is contained in:
@@ -2124,10 +2124,33 @@ static int txt_to_json(DnsTxtItem *items, JsonVariant **ret) {
|
||||
r = json_variant_new_array(ret, elements, n);
|
||||
|
||||
finalize:
|
||||
for (size_t i = 0; i < n; i++)
|
||||
json_variant_unref(elements[i]);
|
||||
json_variant_unref_many(elements, n);
|
||||
return r;
|
||||
}
|
||||
|
||||
free(elements);
|
||||
static int svc_params_to_json(DnsSvcParam *params, JsonVariant **ret) {
|
||||
JsonVariant **elements = NULL;
|
||||
size_t n = 0;
|
||||
int r;
|
||||
|
||||
assert(ret);
|
||||
|
||||
LIST_FOREACH(params, i, params) {
|
||||
if (!GREEDY_REALLOC(elements, n + 1)) {
|
||||
r = -ENOMEM;
|
||||
goto finalize;
|
||||
}
|
||||
|
||||
r = json_variant_new_base64(elements + n, i->value, i->length);
|
||||
if (r < 0)
|
||||
goto finalize;
|
||||
|
||||
n++;
|
||||
}
|
||||
|
||||
r = json_variant_new_array(ret, elements, n);
|
||||
finalize:
|
||||
json_variant_unref_many(elements, n);
|
||||
return r;
|
||||
}
|
||||
|
||||
@@ -2306,6 +2329,21 @@ int dns_resource_record_to_json(DnsResourceRecord *rr, JsonVariant **ret) {
|
||||
JSON_BUILD_PAIR("matchingType", JSON_BUILD_UNSIGNED(rr->tlsa.matching_type)),
|
||||
JSON_BUILD_PAIR("data", JSON_BUILD_HEX(rr->tlsa.data, rr->tlsa.data_size))));
|
||||
|
||||
case DNS_TYPE_SVCB:
|
||||
case DNS_TYPE_HTTPS: {
|
||||
_cleanup_(json_variant_unrefp) JsonVariant *p = NULL;
|
||||
r = svc_params_to_json(rr->svcb.params, &p);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
return json_build(ret,
|
||||
JSON_BUILD_OBJECT(
|
||||
JSON_BUILD_PAIR("key", JSON_BUILD_VARIANT(k)),
|
||||
JSON_BUILD_PAIR("priority", JSON_BUILD_UNSIGNED(rr->svcb.priority)),
|
||||
JSON_BUILD_PAIR("target", JSON_BUILD_STRING(rr->svcb.target_name)),
|
||||
JSON_BUILD_PAIR("params", JSON_BUILD_VARIANT(p))));
|
||||
}
|
||||
|
||||
case DNS_TYPE_CAA:
|
||||
return json_build(ret,
|
||||
JSON_BUILD_OBJECT(
|
||||
|
||||
@@ -59,7 +59,9 @@ VARLINK_DEFINE_STRUCT_TYPE(
|
||||
VARLINK_DEFINE_FIELD(matchingType, VARLINK_INT, VARLINK_NULLABLE),
|
||||
VARLINK_DEFINE_FIELD(data, VARLINK_STRING, VARLINK_NULLABLE),
|
||||
VARLINK_DEFINE_FIELD(tag, VARLINK_STRING, VARLINK_NULLABLE),
|
||||
VARLINK_DEFINE_FIELD(value, VARLINK_STRING, VARLINK_NULLABLE));
|
||||
VARLINK_DEFINE_FIELD(value, VARLINK_STRING, VARLINK_NULLABLE),
|
||||
VARLINK_DEFINE_FIELD(target, VARLINK_STRING, VARLINK_NULLABLE),
|
||||
VARLINK_DEFINE_FIELD(params, VARLINK_STRING, VARLINK_NULLABLE|VARLINK_ARRAY));
|
||||
|
||||
VARLINK_DEFINE_STRUCT_TYPE(
|
||||
ResourceRecordArray,
|
||||
|
||||
Reference in New Issue
Block a user