OSSL_TIME (*now_cb)(void *arg);
void *now_cb_arg;
uint64_t override_process_id;
+ const char *override_impl_name;
} QLOG_TRACE_INFO;
QLOG *ossl_qlog_new(const QLOG_TRACE_INFO *info);
if (info->title != NULL
&& (qlog->info.title = OPENSSL_strdup(info->title)) == NULL)
- goto err;
+ goto err;
if (info->description != NULL
&& (qlog->info.description = OPENSSL_strdup(info->description)) == NULL)
- goto err;
+ goto err;
if (info->group_id != NULL
&& (qlog->info.group_id = OPENSSL_strdup(info->group_id)) == NULL)
- goto err;
+ goto err;
+
+ if (info->override_impl_name != NULL
+ && (qlog->info.override_impl_name
+ = OPENSSL_strdup(info->override_impl_name)) == NULL)
+ goto err;
if (!ossl_json_init(&qlog->json, NULL,
OSSL_JSON_FLAG_IJSON | OSSL_JSON_FLAG_SEQ))
OPENSSL_free((char *)qlog->info.title);
OPENSSL_free((char *)qlog->info.description);
OPENSSL_free((char *)qlog->info.group_id);
+ OPENSSL_free((char *)qlog->info.override_impl_name);
OPENSSL_free(qlog);
}
return NULL;
OPENSSL_free((char *)qlog->info.title);
OPENSSL_free((char *)qlog->info.description);
OPENSSL_free((char *)qlog->info.group_id);
+ OPENSSL_free((char *)qlog->info.override_impl_name);
OPENSSL_free(qlog);
}
ossl_json_key(&qlog->json, "vantage_point");
ossl_json_object_begin(&qlog->json);
{
+ char buf[128];
+ const char *p = buf;
+
+ if (qlog->info.override_impl_name != NULL) {
+ p = qlog->info.override_impl_name;
+ } else {
+ snprintf(buf, sizeof(buf), "OpenSSL/%s (%s)",
+ OpenSSL_version(OPENSSL_FULL_VERSION_STRING),
+ OpenSSL_version(OPENSSL_PLATFORM) + 10);
+ }
+
ossl_json_key(&qlog->json, "type");
ossl_json_str(&qlog->json, qlog->info.is_server
? "server" : "client");
+
+ ossl_json_key(&qlog->json, "name");
+ ossl_json_str(&qlog->json, p);
} /* vantage_point */
ossl_json_object_end(&qlog->json);
} /* trace */
"\"test title\",\"description\":\"test description\",\"trace\":{"
"\"common_fields\":{\"time_format\":\"delta\",\"protocol_type\":"
"[\"QUIC\"],\"group_id\":\"test group ID\",\"system_info\":{"
- "\"process_id\":123}},\"vantage_point\":{\"type\":\"client\"}}}\n"
+ "\"process_id\":123}},\"vantage_point\":{\"type\":\"client\","
+ "\"name\":\"OpenSSL/x.y.z\"}}}\n"
"\x1e{\"name\":\"transport:packet_sent\",\"data\":{\"field1\":\"foo\","
"\"field2\":\"bar\",\"field3\":42,\"field4\":\"1152921504606846976\","
qti.group_id = "test group ID";
qti.override_process_id = 123;
qti.now_cb = now;
+ qti.override_impl_name = "OpenSSL/x.y.z";
if (!TEST_ptr(qlog = ossl_qlog_new(&qti)))
goto err;
# this file except in compliance with the License. You can obtain a copy
# in the file LICENSE in the source distribution or at
# https://www.openssl.org/source/license.html
-import sys, os, os.path, glob, json
+import sys, os, os.path, glob, json, re
+
+re_version = re.compile(r'''^OpenSSL/[0-9]+\.[0-9]\.[0-9](-[^ ]+)? ([^)]+)''')
class Unexpected(Exception):
def __init__(self, filename, msg):
if hdr_trace["vantage_point"].get('type') not in ('client', 'server'):
raise Unexpected(filename, "unexpected vantage_point")
+ vp_name = hdr_trace["vantage_point"].get('name')
+ if type(vp_name) != str:
+ raise Unexpected(filename, "expected vantage_point name")
+
+ if not re_version.match(vp_name):
+ raise Unexpected(filename, "expected correct vantage_point format")
+
hdr_common_fields = hdr_trace["common_fields"]
if hdr_common_fields.get("time_format") != "delta":
raise Unexpected(filename, "must have expected time_format")