X-Git-Url: https://git.lttng.org/?p=lttngtop.git;a=blobdiff_plain;f=src%2Fnetwork-live.c;h=4f5caef1b18ba7d87a561c78535a407442960037;hp=31c1354397e4515f563d63a19f747f1f4ea8aa6a;hb=3bac1a1f2f88bc39f1f2eb09efe508f4c59d4428;hpb=12a91e9dd6c9cc18989351762d19ed1e69fe627c diff --git a/src/network-live.c b/src/network-live.c index 31c1354..4f5caef 100644 --- a/src/network-live.c +++ b/src/network-live.c @@ -34,9 +34,9 @@ #include #include -#include "lttng-viewer.h" +#include "lttng-viewer-abi.h" #include "network-live.h" -#include "lttng-live-functions.h" +#include "lttng-live-comm.h" #include #include @@ -54,10 +54,10 @@ /* * hostname parameter needs to hold NAME_MAX chars. */ -static int parse_url(const char *path, char *hostname, int *port, - uint64_t *session_id) +static +int parse_url(const char *path, struct lttng_live_ctx *ctx) { - char remain[2][NAME_MAX]; + char remain[3][NAME_MAX]; int ret = -1, proto, proto_offset = 0; size_t path_len = strlen(path); @@ -84,16 +84,15 @@ static int parse_url(const char *path, char *hostname, int *port, /* TODO : parse for IPv6 as well */ /* Parse the hostname or IP */ ret = sscanf(&path[proto_offset], "%[a-zA-Z.0-9%-]%s", - hostname, remain[0]); + ctx->relay_hostname, remain[0]); if (ret == 2) { /* Optional port number */ switch (remain[0][0]) { case ':': - ret = sscanf(remain[0], ":%d%s", port, remain[1]); + ret = sscanf(remain[0], ":%d%s", &ctx->port, remain[1]); /* Optional session ID with port number */ if (ret == 2) { - ret = sscanf(remain[1], "/%" PRIu64, - session_id); + ret = sscanf(remain[1], "/%s", remain[2]); /* Accept 0 or 1 (optional) */ if (ret < 0) { goto end; @@ -102,7 +101,7 @@ static int parse_url(const char *path, char *hostname, int *port, break; case '/': /* Optional session ID */ - ret = sscanf(remain[0], "/%" PRIu64, session_id); + ret = sscanf(remain[0], "/%s", remain[2]); /* Accept 0 or 1 (optional) */ if (ret < 0) { goto end; @@ -116,17 +115,29 @@ static int parse_url(const char *path, char *hostname, int *port, } } - if (*port < 0) - *port = LTTNG_DEFAULT_NETWORK_VIEWER_PORT; + if (ctx->port < 0) + ctx->port = LTTNG_DEFAULT_NETWORK_VIEWER_PORT; - if (*session_id == -1ULL) + if (strlen(remain[2]) == 0) { printf_verbose("Connecting to hostname : %s, port : %d, " "proto : IPv%d\n", - hostname, *port, proto); - else - printf_verbose("Connecting to hostname : %s, port : %d, " - "session id : %" PRIu64 ", proto : IPv%d\n", - hostname, *port, *session_id, proto); + ctx->relay_hostname, ctx->port, proto); + ret = 0; + goto end; + } + ret = sscanf(remain[2], "host/%[a-zA-Z.0-9%-]/%s", + ctx->traced_hostname, ctx->session_name); + if (ret != 2) { + fprintf(stderr, "[error] Format : " + "net:///host//\n"); + goto end; + } + + printf_verbose("Connecting to hostname : %s, port : %d, " + "traced hostname : %s, session name : %s, " + "proto : IPv%d\n", + ctx->relay_hostname, ctx->port, ctx->traced_hostname, + ctx->session_name, proto); ret = 0; end: @@ -135,53 +146,52 @@ end: static int lttng_live_open_trace_read(const char *path) { - char hostname[NAME_MAX]; - int port = -1; - uint64_t session_id = -1ULL; int ret = 0; - struct lttng_live_ctx ctx; + struct lttng_live_ctx *ctx; - ctx.session = g_new0(struct lttng_live_session, 1); + ctx = g_new0(struct lttng_live_ctx, 1); + ctx->session = g_new0(struct lttng_live_session, 1); /* We need a pointer to the context from the packet_seek function. */ - ctx.session->ctx = &ctx; + ctx->session->ctx = ctx; /* HT to store the CTF traces. */ - ctx.session->ctf_traces = g_hash_table_new(g_direct_hash, + ctx->session->ctf_traces = g_hash_table_new(g_direct_hash, g_direct_equal); + ctx->port = -1; + ctx->session_ids = g_array_new(FALSE, TRUE, sizeof(uint64_t)); - ret = parse_url(path, hostname, &port, &session_id); + ret = parse_url(path, ctx); if (ret < 0) { goto end_free; } - ret = lttng_live_connect_viewer(&ctx, hostname, port); + ret = lttng_live_connect_viewer(ctx); if (ret < 0) { fprintf(stderr, "[error] Connection failed\n"); goto end_free; } printf_verbose("LTTng-live connected to relayd\n"); - ret = lttng_live_establish_connection(&ctx); + ret = lttng_live_establish_connection(ctx); if (ret < 0) { goto end_free; } - - if (session_id == -1ULL) { - printf_verbose("Listing sessions\n"); - ret = lttng_live_list_sessions(&ctx, path); - if (ret < 0) { - fprintf(stderr, "[error] List error\n"); - goto end_free; - } - } else { - lttng_live_read(&ctx, session_id); + printf_verbose("Listing sessions\n"); + ret = lttng_live_list_sessions(ctx, path); + if (ret < 0) { + fprintf(stderr, "[error] List error\n"); + goto end_free; } + if (ctx->session_ids->len > 0) + lttng_live_read(ctx); + end_free: - g_hash_table_destroy(ctx.session->ctf_traces); - g_free(ctx.session); - g_free(ctx.session->streams); + g_hash_table_destroy(ctx->session->ctf_traces); + g_free(ctx->session); + g_free(ctx->session->streams); + g_free(ctx); return ret; }