Rename C++ header files to .hpp
[lttng-tools.git] / src / lib / lttng-ctl / lttng-ctl.cpp
index 7539302428f668ff2af59ff26b0c99118d7e1efe..c5d47ebdc53d66b2182a6656b2ecb955fdf91942 100644 (file)
 #include <string.h>
 #include <unistd.h>
 
-#include <common/bytecode/bytecode.h>
-#include <common/align.h>
-#include <common/common.h>
-#include <common/compat/errno.h>
-#include <common/compat/string.h>
-#include <common/defaults.h>
-#include <common/dynamic-array.h>
-#include <common/dynamic-buffer.h>
-#include <common/payload-view.h>
-#include <common/payload.h>
-#include <common/sessiond-comm/sessiond-comm.h>
-#include <common/tracker.h>
-#include <common/unix.h>
-#include <common/uri.h>
-#include <common/utils.h>
-#include <lttng/channel-internal.h>
+#include <common/bytecode/bytecode.hpp>
+#include <common/align.hpp>
+#include <common/common.hpp>
+#include <common/compat/errno.hpp>
+#include <common/compat/string.hpp>
+#include <common/defaults.hpp>
+#include <common/dynamic-array.hpp>
+#include <common/dynamic-buffer.hpp>
+#include <common/payload-view.hpp>
+#include <common/payload.hpp>
+#include <common/sessiond-comm/sessiond-comm.hpp>
+#include <common/tracker.hpp>
+#include <common/unix.hpp>
+#include <common/uri.hpp>
+#include <common/utils.hpp>
+#include <lttng/channel-internal.hpp>
 #include <lttng/destruction-handle.h>
 #include <lttng/endpoint.h>
-#include <lttng/error-query-internal.h>
-#include <lttng/event-internal.h>
-#include <lttng/health-internal.h>
+#include <lttng/error-query-internal.hpp>
+#include <lttng/event-internal.hpp>
+#include <lttng/health-internal.hpp>
 #include <lttng/lttng-error.h>
 #include <lttng/lttng.h>
-#include <lttng/session-descriptor-internal.h>
-#include <lttng/session-internal.h>
-#include <lttng/trigger/trigger-internal.h>
-#include <lttng/userspace-probe-internal.h>
+#include <lttng/session-descriptor-internal.hpp>
+#include <lttng/session-internal.hpp>
+#include <lttng/trigger/trigger-internal.hpp>
+#include <lttng/userspace-probe-internal.hpp>
 
-#include "lttng-ctl-helper.h"
-#include <common/filter/filter-ast.h>
+#include "lttng-ctl-helper.hpp"
+#include <common/filter/filter-ast.hpp>
 #include <common/filter/filter-parser.hpp>
-#include <common/filter/memstream.h>
+#include <common/filter/memstream.hpp>
 
 #define COPY_DOMAIN_PACKED(dst, src)                           \
 do {                                                           \
@@ -911,13 +911,21 @@ int lttng_stop_tracing_no_wait(const char *session_name)
  * Returns the size of the returned payload data or a negative error code.
  */
 int lttng_add_context(struct lttng_handle *handle,
-               struct lttng_event_context *ctx, const char *event_name,
+               struct lttng_event_context *ctx,
+               const char *event_name __attribute__((unused)),
                const char *channel_name)
 {
        int ret;
-       size_t len = 0;
-       char *buf = NULL;
-       struct lttcomm_session_msg lsm;
+       struct lttcomm_session_msg lsm = {
+               .cmd_type = LTTNG_ADD_CONTEXT,
+               .session = {},
+               .domain = {},
+               .u = {},
+               .fd_count = 0,
+       };
+       struct lttng_payload payload;
+
+       lttng_payload_init(&payload);
 
        /* Safety check. Both are mandatory. */
        if (handle == NULL || ctx == NULL) {
@@ -925,8 +933,11 @@ int lttng_add_context(struct lttng_handle *handle,
                goto end;
        }
 
-       memset(&lsm, 0, sizeof(lsm));
-       lsm.cmd_type = LTTNG_ADD_CONTEXT;
+       ret = lttng_dynamic_buffer_set_size(&payload.buffer, sizeof(lsm));
+       if (ret) {
+               ret = -LTTNG_ERR_NOMEM;
+               goto end;
+       }
 
        /* If no channel name, send empty string. */
        ret = lttng_strncpy(lsm.u.context.channel_name, channel_name ?: "",
@@ -944,55 +955,33 @@ int lttng_add_context(struct lttng_handle *handle,
                goto end;
        }
 
-       if (ctx->ctx == LTTNG_EVENT_CONTEXT_APP_CONTEXT) {
-               size_t provider_len, ctx_len;
-               const char *provider_name = ctx->u.app_ctx.provider_name;
-               const char *ctx_name = ctx->u.app_ctx.ctx_name;
-
-               if (!provider_name || !ctx_name) {
-                       ret = -LTTNG_ERR_INVALID;
-                       goto end;
-               }
+       ret = lttng_event_context_serialize(ctx, &payload);
+       if (ret) {
+               ret = -LTTNG_ERR_INVALID;
+               goto end;
+       }
 
-               provider_len = strlen(provider_name);
-               if (provider_len == 0) {
-                       ret = -LTTNG_ERR_INVALID;
-                       goto end;
-               }
-               lsm.u.context.provider_name_len = provider_len;
+       lsm.u.context.length = payload.buffer.size - sizeof(lsm);
 
-               ctx_len = strlen(ctx_name);
-               if (ctx_len == 0) {
-                       ret = -LTTNG_ERR_INVALID;
-                       goto end;
-               }
-               lsm.u.context.context_name_len = ctx_len;
+       /* Update message header. */
+       memcpy(payload.buffer.data, &lsm, sizeof(lsm));
 
-               len = provider_len + ctx_len;
-               buf = (char *) zmalloc(len);
-               if (!buf) {
-                       ret = -LTTNG_ERR_NOMEM;
+       {
+               struct lttng_payload reply;
+               struct lttng_payload_view payload_view =
+                               lttng_payload_view_from_payload(&payload, 0,
+                               -1);
+
+               lttng_payload_init(&reply);
+               ret = lttng_ctl_ask_sessiond_payload(&payload_view, &reply);
+               lttng_payload_reset(&reply);
+               if (ret) {
                        goto end;
                }
-
-               memcpy(buf, provider_name, provider_len);
-               memcpy(buf + provider_len, ctx_name, ctx_len);
-       }
-       memcpy(&lsm.u.context.ctx, ctx, sizeof(struct lttng_event_context));
-
-       if (ctx->ctx == LTTNG_EVENT_CONTEXT_APP_CONTEXT) {
-               /*
-                * Don't leak application addresses to the sessiond.
-                * This is only necessary when ctx is for an app ctx otherwise
-                * the values inside the union (type & config) are overwritten.
-                */
-               lsm.u.context.ctx.u.app_ctx.provider_name = NULL;
-               lsm.u.context.ctx.u.app_ctx.ctx_name = NULL;
        }
 
-       ret = lttng_ctl_ask_sessiond_varlen_no_cmd_header(&lsm, buf, len, NULL);
 end:
-       free(buf);
+       lttng_payload_reset(&payload);
        return ret;
 }
 
@@ -1101,7 +1090,13 @@ int lttng_enable_event_with_exclusions(struct lttng_handle *handle,
                const char *original_filter_expression,
                int exclusion_count, char **exclusion_list)
 {
-       struct lttcomm_session_msg lsm = { .cmd_type = LTTNG_ENABLE_EVENT };
+       struct lttcomm_session_msg lsm = {
+               .cmd_type = LTTNG_ENABLE_EVENT,
+               .session = {},
+               .domain = {},
+               .u = {},
+               .fd_count = 0,
+       };
        struct lttng_payload payload;
        int ret = 0;
        unsigned int free_filter_expression = 0;
@@ -1280,7 +1275,13 @@ int lttng_disable_event_ext(struct lttng_handle *handle,
                struct lttng_event *ev, const char *channel_name,
                const char *original_filter_expression)
 {
-       struct lttcomm_session_msg lsm = { .cmd_type = LTTNG_DISABLE_EVENT };
+       struct lttcomm_session_msg lsm = {
+               .cmd_type = LTTNG_DISABLE_EVENT,
+               .session = {},
+               .domain = {},
+               .u = {},
+               .fd_count = 0,
+       };
        struct lttng_payload payload;
        int ret = 0;
        unsigned int free_filter_expression = 0;
@@ -1667,7 +1668,13 @@ int lttng_list_tracepoints(struct lttng_handle *handle,
         enum lttng_error_code ret_code;
         int ret, total_payload_received;
         char *reception_buffer = NULL;
-        struct lttcomm_session_msg lsm = { .cmd_type = LTTNG_LIST_TRACEPOINTS };
+        struct lttcomm_session_msg lsm = {
+               .cmd_type = LTTNG_LIST_TRACEPOINTS,
+               .session = {},
+               .domain = {},
+               .u = {},
+               .fd_count = 0,
+       };
         struct lttcomm_list_command_header *cmd_header = NULL;
         size_t cmd_header_len;
         unsigned int nb_events = 0;
@@ -1733,23 +1740,74 @@ end:
 int lttng_list_tracepoint_fields(struct lttng_handle *handle,
                struct lttng_event_field **fields)
 {
+       enum lttng_error_code ret_code;
        int ret;
        struct lttcomm_session_msg lsm;
+       const struct lttcomm_list_command_header *cmd_header = NULL;
+       unsigned int nb_event_fields = 0;
+       struct lttng_payload reply;
 
        if (handle == NULL) {
-               return -LTTNG_ERR_INVALID;
+               ret = -LTTNG_ERR_INVALID;
+               goto end;
        }
 
+       lttng_payload_init(&reply);
+
        memset(&lsm, 0, sizeof(lsm));
        lsm.cmd_type = LTTNG_LIST_TRACEPOINT_FIELDS;
        COPY_DOMAIN_PACKED(lsm.domain, handle->domain);
 
-       ret = lttng_ctl_ask_sessiond(&lsm, (void **) fields);
-       if (ret < 0) {
-               return ret;
+       {
+               lttng_payload_view message_view =
+                               lttng_payload_view_init_from_buffer(
+                                       (const char *) &lsm, 0,
+                                       sizeof(lsm));
+
+               ret = lttng_ctl_ask_sessiond_payload(&message_view, &reply);
+               if (ret < 0) {
+                       goto end;
+               }
        }
 
-       return ret / sizeof(struct lttng_event_field);
+       {
+               const lttng_buffer_view cmd_header_view =
+                               lttng_buffer_view_from_dynamic_buffer(
+                                       &reply.buffer, 0, sizeof(*cmd_header));
+
+               if (!lttng_buffer_view_is_valid(&cmd_header_view)) {
+                       ret = -LTTNG_ERR_INVALID_PROTOCOL;
+                       goto end;
+               }
+
+               cmd_header = (struct lttcomm_list_command_header *)
+                               cmd_header_view.data;
+       }
+
+       if (cmd_header->count > INT_MAX) {
+               ret = -LTTNG_ERR_OVERFLOW;
+               goto end;
+       }
+
+       nb_event_fields = cmd_header->count;
+
+       {
+               lttng_payload_view reply_view =
+                               lttng_payload_view_from_payload(&reply,
+                               sizeof(*cmd_header), -1);
+
+               ret_code = lttng_event_fields_create_and_flatten_from_payload(
+                               &reply_view, nb_event_fields, fields);
+               if (ret_code != LTTNG_OK) {
+                       ret = -ret_code;
+                       goto end;
+               }
+       }
+
+       ret = nb_event_fields;
+
+end:
+       return ret;
 }
 
 /*
@@ -1841,6 +1899,10 @@ enum lttng_error_code lttng_create_session_ext(
        enum lttng_error_code ret_code;
        struct lttcomm_session_msg lsm = {
                .cmd_type = LTTNG_CREATE_SESSION_EXT,
+               .session = {},
+               .domain = {},
+               .u = {},
+               .fd_count = 0,
        };
        void *reply = NULL;
        struct lttng_buffer_view reply_view;
@@ -2383,14 +2445,14 @@ int lttng_list_events(struct lttng_handle *handle,
                                (const char *) &lsm, 0, sizeof(lsm));
        unsigned int nb_events = 0;
 
+       lttng_payload_init(&reply);
+
        /* Safety check. An handle and channel name are mandatory. */
        if (handle == NULL || channel_name == NULL) {
                ret = -LTTNG_ERR_INVALID;
                goto end;
        }
 
-       lttng_payload_init(&reply);
-
        /* Initialize command parameters. */
        lsm.cmd_type = LTTNG_LIST_EVENTS;
        ret = lttng_strncpy(lsm.session.name, handle->session_name,
@@ -2487,8 +2549,8 @@ end:
        return ret;
 }
 
-int lttng_calibrate(struct lttng_handle *handle,
-               struct lttng_calibrate *calibrate)
+int lttng_calibrate(struct lttng_handle *handle __attribute__((unused)),
+               struct lttng_calibrate *calibrate __attribute__((unused)))
 {
        /*
         * This command was removed in LTTng 2.9.
@@ -2794,7 +2856,7 @@ error:
  */
 extern "C"
 LTTNG_EXPORT int lttng_enable_consumer(struct lttng_handle *handle);
-int lttng_enable_consumer(struct lttng_handle *handle)
+int lttng_enable_consumer(struct lttng_handle *handle __attribute__((unused)))
 {
        return -ENOSYS;
 }
@@ -2804,7 +2866,7 @@ int lttng_enable_consumer(struct lttng_handle *handle)
  */
 extern "C"
 LTTNG_EXPORT int lttng_disable_consumer(struct lttng_handle *handle);
-int lttng_disable_consumer(struct lttng_handle *handle)
+int lttng_disable_consumer(struct lttng_handle *handle __attribute__((unused)))
 {
        return -ENOSYS;
 }
@@ -2815,8 +2877,9 @@ int lttng_disable_consumer(struct lttng_handle *handle)
 extern "C"
 LTTNG_EXPORT int _lttng_create_session_ext(const char *name, const char *url,
                const char *datetime);
-int _lttng_create_session_ext(const char *name, const char *url,
-               const char *datetime)
+int _lttng_create_session_ext(const char *name __attribute__((unused)),
+               const char *url __attribute__((unused)),
+               const char *datetime __attribute__((unused)))
 {
        return -ENOSYS;
 }
@@ -2948,6 +3011,10 @@ int _lttng_register_trigger(struct lttng_trigger *trigger, const char *name,
        int ret;
        struct lttcomm_session_msg lsm = {
                .cmd_type = LTTNG_REGISTER_TRIGGER,
+               .session = {},
+               .domain = {},
+               .u = {},
+               .fd_count = 0,
        };
        lsm.u.trigger.is_trigger_anonymous = !name && !generate_name;
        struct lttcomm_session_msg *message_lsm;
@@ -3120,6 +3187,10 @@ enum lttng_error_code lttng_error_query_execute(
        enum lttng_error_code ret_code;
        struct lttcomm_session_msg lsm = {
                .cmd_type = LTTNG_EXECUTE_ERROR_QUERY,
+               .session = {},
+               .domain = {},
+               .u = {},
+               .fd_count = 0,
        };
        struct lttng_payload message;
        struct lttng_payload reply;
@@ -3304,7 +3375,13 @@ enum lttng_error_code lttng_list_triggers(struct lttng_triggers **triggers)
 {
        int ret;
        enum lttng_error_code ret_code = LTTNG_OK;
-       struct lttcomm_session_msg lsm = { .cmd_type = LTTNG_LIST_TRIGGERS };
+       struct lttcomm_session_msg lsm = {
+               .cmd_type = LTTNG_LIST_TRIGGERS,
+               .session = {},
+               .domain = {},
+               .u = {},
+               .fd_count = 0,
+       };
        struct lttng_triggers *local_triggers = NULL;
        struct lttng_payload reply;
        struct lttng_payload_view lsm_view =
This page took 0.0288079999999999 seconds and 4 git commands to generate.