+
+ g_free(validate_error);
+
+ return status;
+}
+
+static
+bt_component_class_query_method_status lttng_live_query_support_info(
+ const bt_value *params, const bt_value **result,
+ bt_logging_level log_level)
+{
+ bt_component_class_query_method_status status =
+ BT_COMPONENT_CLASS_QUERY_METHOD_STATUS_OK;
+ const bt_value *input_type_value;
+ const bt_value *input_value;
+ double weight = 0;
+ struct bt_common_lttng_live_url_parts parts = { 0 };
+
+ /* Used by the logging macros */
+ __attribute__((unused)) bt_self_component *self_comp = NULL;
+
+ *result = NULL;
+ input_type_value = bt_value_map_borrow_entry_value_const(params,
+ "type");
+ if (!input_type_value) {
+ BT_COMP_LOGE("Missing expected `type` parameter.");
+ goto error;
+ }
+
+ if (!bt_value_is_string(input_type_value)) {
+ BT_COMP_LOGE("`type` parameter is not a string value.");
+ goto error;
+ }
+
+ if (strcmp(bt_value_string_get(input_type_value), "string") != 0) {
+ /* We don't handle file system paths */
+ goto create_result;
+ }
+
+ input_value = bt_value_map_borrow_entry_value_const(params, "input");
+ if (!input_value) {
+ BT_COMP_LOGE("Missing expected `input` parameter.");
+ goto error;
+ }
+
+ if (!bt_value_is_string(input_value)) {
+ BT_COMP_LOGE("`input` parameter is not a string value.");
+ goto error;
+ }
+
+ parts = bt_common_parse_lttng_live_url(bt_value_string_get(input_value),
+ NULL, 0);
+ if (parts.session_name) {
+ /*
+ * Looks pretty much like an LTTng live URL: we got the
+ * session name part, which forms a complete URL.
+ */
+ weight = .75;
+ }
+
+create_result:
+ *result = bt_value_real_create_init(weight);
+ if (!*result) {
+ status = BT_COMPONENT_CLASS_QUERY_METHOD_STATUS_MEMORY_ERROR;
+ goto error;
+ }
+
+ goto end;
+
+error:
+ if (status >= 0) {
+ status = BT_COMPONENT_CLASS_QUERY_METHOD_STATUS_ERROR;
+ }
+
+ BT_ASSERT(!*result);
+
+end:
+ bt_common_destroy_lttng_live_url_parts(&parts);