wip: receive trigger registration in session daemon
[lttng-tools.git] / src / bin / lttng-sessiond / cmd.c
index cc81906b6267ffc104ee357741d0b099af9fbc3c..3f2de9e7e021cb7fbd57276db4c71420e7b62a3b 100644 (file)
@@ -29,6 +29,7 @@
 #include <common/utils.h>
 #include <common/compat/string.h>
 #include <common/kernel-ctl/kernel-ctl.h>
+#include <lttng/trigger/trigger-internal.h>
 
 #include "channel.h"
 #include "consumer.h"
@@ -3566,6 +3567,42 @@ end:
        return ret;
 }
 
+int cmd_register_trigger(struct command_ctx *cmd_ctx, int sock)
+{
+       int ret;
+       size_t trigger_len;
+       ssize_t sock_recv_len;
+       char *trigger_buffer = NULL;
+       struct lttng_trigger *trigger = NULL;
+
+       trigger_len = (size_t) cmd_ctx->lsm->u.trigger.header.len;
+       trigger_buffer = zmalloc(trigger_len);
+       if (!trigger_buffer) {
+               ret = LTTNG_ERR_NOMEM;
+               goto end;
+       }
+
+       sock_recv_len = lttcomm_recv_unix_sock(sock, trigger_buffer,
+                       trigger_len);
+       if (sock_recv_len < 0 || sock_recv_len != trigger_len) {
+               ERR("Failed to receive \"register trigger\" command payload");
+               goto end;
+       }
+
+       if (lttng_trigger_create_from_buffer(trigger_buffer, &trigger) !=
+                       trigger_len) {
+               ERR("Invalid trigger payload received in \"register trigger\" command");
+               ret = LTTNG_ERR_INVALID_TRIGGER;
+               goto end;
+       }
+       DBG("Command register trigger succeeded");
+       ret = LTTNG_OK;
+end:
+       free(trigger_buffer);
+       lttng_trigger_destroy(trigger);
+       return ret;
+}
+
 /*
  * Send relayd sockets from snapshot output to consumer. Ignore request if the
  * snapshot output is *not* set with a remote destination.
This page took 0.028651 seconds and 5 git commands to generate.