#include <sys/stat.h>
#include <stdbool.h>
-#include <common/defaults.h>
-#include <common/error.h>
-#include <common/macros.h>
-#include <common/utils.h>
-#include <common/dynamic-buffer.h>
-#include <common/compat/getenv.h>
+#include <common/defaults.hpp>
+#include <common/error.hpp>
+#include <common/macros.hpp>
+#include <common/utils.hpp>
+#include <common/dynamic-buffer.hpp>
+#include <common/compat/getenv.hpp>
#include <lttng/lttng-error.h>
#include <libxml/parser.h>
#include <libxml/valid.h>
#include <lttng/rotation.h>
#include <lttng/userspace-probe.h>
-#include "session-config.h"
-#include "config-internal.h"
+#include "session-config.hpp"
+#include "config-internal.hpp"
#define CONFIG_USERSPACE_PROBE_LOOKUP_METHOD_NAME_MAX_LEN 7
+namespace {
struct session_config_validation_ctx {
xmlSchemaParserCtxtPtr parser_ctx;
xmlSchemaPtr schema;
xmlSchemaValidCtxtPtr schema_validation_ctx;
};
+} /* namespace */
const char * const config_element_all = "all";
LTTNG_EXPORT const char *config_xml_encoding = "UTF-8";
ENABLE = 1,
};
+namespace {
struct consumer_output {
int enabled;
char *path;
char *control_uri;
char *data_uri;
};
+} /* namespace */
/*
* Returns a xmlChar string which must be released using xmlFree().
struct config_writer *writer;
xmlOutputBufferPtr buffer;
- writer = (config_writer *) zmalloc(sizeof(struct config_writer));
+ writer = zmalloc<config_writer>();
if (!writer) {
PERROR("zmalloc config_writer_create");
goto end;
}
static ATTR_FORMAT_PRINTF(2, 3)
-void xml_error_handler(void *ctx, const char *format, ...)
+void xml_error_handler(void *ctx __attribute__((unused)), const char *format, ...)
{
char *errMsg;
va_list args;
base_path_len = strlen(base_path);
max_path_len = base_path_len +
sizeof(DEFAULT_SESSION_CONFIG_XSD_FILENAME) + 1;
- xsd_path = (char *) zmalloc(max_path_len);
+ xsd_path = zmalloc<char>(max_path_len);
if (!xsd_path) {
goto end;
}
return ret;
}
-static
-int create_session_net_output(const char *name, const char *control_uri,
- const char *data_uri)
-{
- int ret;
- struct lttng_handle *handle;
- const char *uri = NULL;
-
- LTTNG_ASSERT(name);
-
- handle = lttng_create_handle(name, NULL);
- if (!handle) {
- ret = -LTTNG_ERR_NOMEM;
- goto end;
- }
-
- if (!control_uri || !data_uri) {
- uri = control_uri ? control_uri : data_uri;
- control_uri = uri;
- data_uri = uri;
- }
-
- ret = lttng_set_consumer_url(handle, control_uri, data_uri);
- lttng_destroy_handle(handle);
-end:
- return ret;
-}
-
static
int create_snapshot_session(const char *session_name, xmlNodePtr output_node,
const struct config_load_session_override_attr *overrides)
{
int ret;
+ enum lttng_error_code ret_code;
xmlNodePtr node = NULL;
xmlNodePtr snapshot_output_list_node;
xmlNodePtr snapshot_output_node;
+ struct lttng_session_descriptor *session_descriptor = nullptr;
LTTNG_ASSERT(session_name);
+ LTTNG_ASSERT(output_node);
- ret = lttng_create_session_snapshot(session_name, NULL);
- if (ret) {
+ /*
+ * Use a descriptor without output since consumer output size is not
+ * exposed by the session descriptor api.
+ */
+ session_descriptor = lttng_session_descriptor_snapshot_create(session_name);
+ if (session_descriptor == nullptr) {
+ ret = -LTTNG_ERR_NOMEM;
goto end;
}
- if (!output_node) {
+ ret_code = lttng_create_session_ext(session_descriptor);
+ if (ret_code != LTTNG_OK) {
+ ret = -ret_code;
goto end;
}
snapshot_output_list_node = xmlFirstElementChild(output_node);
/* Parse and create snapshot outputs */
-
for (snapshot_output_node =
xmlFirstElementChild(snapshot_output_list_node);
snapshot_output_node; snapshot_output_node =
xmlNextElementSibling(snapshot_output_node)) {
char *name = NULL;
uint64_t max_size = UINT64_MAX;
- struct consumer_output output = { 0 };
+ struct consumer_output output = {};
struct lttng_snapshot_output *snapshot_output = NULL;
const char *control_uri = NULL;
const char *data_uri = NULL;
}
}
end:
+ lttng_session_descriptor_destroy(session_descriptor);
return ret;
}
uint64_t live_timer_interval,
const struct config_load_session_override_attr *overrides)
{
- int ret;
- struct consumer_output output = { 0 };
+ int ret = 0;
+ enum lttng_error_code ret_code;
+ struct consumer_output output = {};
xmlNodePtr consumer_output_node;
const char *control_uri = NULL;
const char *data_uri = NULL;
const char *path = NULL;
+ struct lttng_session_descriptor *session_descriptor = nullptr;
LTTNG_ASSERT(name);
}
}
-
if (live_timer_interval != UINT64_MAX && !control_uri && !data_uri) {
ret = -LTTNG_ERR_LOAD_INVALID_CONFIG;
goto end;
* with a live timer the data and control URIs are provided. So,
* NULL is passed here and will be set right after.
*/
- ret = lttng_create_session_live(name, NULL, live_timer_interval);
+ session_descriptor = lttng_session_descriptor_live_network_create(
+ name, control_uri, data_uri, live_timer_interval);
} else {
- ret = lttng_create_session(name, NULL);
- }
- if (ret) {
- goto end;
- }
-
- ret = create_session_net_output(name, control_uri, data_uri);
- if (ret) {
- goto end;
+ session_descriptor = lttng_session_descriptor_network_create(
+ name, control_uri, data_uri);
}
+ } else if (path != nullptr) {
+ session_descriptor = lttng_session_descriptor_local_create(name, path);
} else {
- /* either local output or no output */
- ret = lttng_create_session(name, path);
- if (ret) {
- goto end;
- }
+ /* No output */
+ session_descriptor = lttng_session_descriptor_create(name);
}
+
+ if (session_descriptor == nullptr) {
+ ret = -LTTNG_ERR_LOAD_INVALID_CONFIG;
+ goto end;
+ }
+
+ ret_code = lttng_create_session_ext(session_descriptor);
+ if (ret_code != LTTNG_OK) {
+ ret = -ret_code;
+ goto end;
+ }
+
end:
free(output.path);
free(output.control_uri);
free(output.data_uri);
+ lttng_session_descriptor_destroy(session_descriptor);
return ret;
}
continue;
}
- exclusions = (char **) zmalloc(exclusion_count * sizeof(char *));
+ exclusions = calloc<char *>(exclusion_count);
if (!exclusions) {
exclusion_count = 0;
ret = -LTTNG_ERR_NOMEM;
/* Init domains to create the session handles */
for (node = xmlFirstElementChild(domains_node); node;
node = xmlNextElementSibling(node)) {
- struct lttng_domain *domain;
+ lttng_domain *domain = zmalloc<lttng_domain>();
- domain = (lttng_domain *) zmalloc(sizeof(*domain));
if (!domain) {
ret = -LTTNG_ERR_NOMEM;
goto error;
int ret;
bool session_loaded = false;
const char *path_ptr = NULL;
- struct session_config_validation_ctx validation_ctx = { 0 };
+ struct session_config_validation_ctx validation_ctx = {};
ret = init_session_config_validation_ctx(&validation_ctx);
if (ret) {