Send ust and kernel domain directory handle to consumer
[lttng-tools.git] / src / common / relayd / relayd.c
index a9c2bb2c36d65829d741ce5b864ed8e7549ff2ed..228b35cb26b4414854a6218bded70003905df28b 100644 (file)
@@ -161,7 +161,7 @@ static int relayd_create_session_2_11(struct lttcomm_relayd_sock *rsock,
        /* The three names are sent with a '\0' delimiter between them. */
        session_name_len = strlen(session_name) + 1;
        hostname_len = strlen(hostname) + 1;
-       base_path_len = base_path ? strlen(base_path) + 1 : 0;
+       base_path_len = strlen(base_path) + 1;
 
        msg_length = sizeof(*msg) + session_name_len + hostname_len + base_path_len;
        msg = zmalloc(msg_length);
@@ -191,7 +191,7 @@ static int relayd_create_session_2_11(struct lttcomm_relayd_sock *rsock,
                goto error;
        }
        dst += hostname_len;
-       if (base_path && lttng_strncpy(dst, base_path, base_path_len)) {
+       if (lttng_strncpy(dst, base_path, base_path_len)) {
                ret = -1;
                goto error;
        }
@@ -491,21 +491,37 @@ error:
  * On success return 0 else return ret_code negative value.
  */
 int relayd_add_stream(struct lttcomm_relayd_sock *rsock, const char *channel_name,
-               const char *pathname, uint64_t *stream_id,
+               const char *domain_name, const char *_pathname, uint64_t *stream_id,
                uint64_t tracefile_size, uint64_t tracefile_count,
                struct lttng_trace_chunk *trace_chunk)
 {
        int ret;
        struct lttcomm_relayd_status_stream reply;
+       char pathname[RELAYD_COMM_LTTNG_PATH_MAX];
+       char *separator;
 
        /* Code flow error. Safety net. */
        assert(rsock);
        assert(channel_name);
-       assert(pathname);
+       assert(domain_name);
+       assert(_pathname);
        assert(trace_chunk);
 
        DBG("Relayd adding stream for channel name %s", channel_name);
 
+       if (_pathname[0] == '\0') {
+               separator = "";
+       } else {
+               separator = "/";
+       }
+       ret = snprintf(pathname, RELAYD_COMM_LTTNG_PATH_MAX, "%s%s%s",
+                       domain_name, separator, _pathname);
+       if (ret <= 0 || ret >= RELAYD_COMM_LTTNG_PATH_MAX) {
+               ERR("stream path too long.");
+               ret = -1;
+               goto error;
+       }
+
        /* Compat with relayd 2.1 */
        if (rsock->minor == 1) {
                /* For 2.1 */
This page took 0.02389 seconds and 4 git commands to generate.