X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fcommon%2Frelayd%2Frelayd.c;h=2283865cf0d86be6c905baa287fd5809f17af8f2;hb=b8086166dbf40d53a4a1e3f0cddbf291fac97bd3;hp=bed0933d1102ae4d13454ba3d152fd86d831f377;hpb=6151a90fe7fa3dea52c57771df9083e56de7a60b;p=lttng-tools.git diff --git a/src/common/relayd/relayd.c b/src/common/relayd/relayd.c index bed0933d1..2283865cf 100644 --- a/src/common/relayd/relayd.c +++ b/src/common/relayd/relayd.c @@ -41,6 +41,10 @@ static int send_command(struct lttcomm_relayd_sock *rsock, char *buf; uint64_t buf_size = sizeof(header); + if (rsock->sock.fd < 0) { + return -ECONNRESET; + } + if (data) { buf_size += size; } @@ -87,7 +91,11 @@ static int recv_reply(struct lttcomm_relayd_sock *rsock, void *data, size_t size { int ret; - DBG3("Relayd waiting for reply of size %ld", size); + if (rsock->sock.fd < 0) { + return -ECONNRESET; + } + + DBG3("Relayd waiting for reply of size %zu", size); ret = rsock->sock.ops->recvmsg(&rsock->sock, data, size, 0); if (ret <= 0 || ret != size) { @@ -95,7 +103,7 @@ static int recv_reply(struct lttcomm_relayd_sock *rsock, void *data, size_t size /* Orderly shutdown. */ DBG("Socket %d has performed an orderly shutdown", rsock->sock.fd); } else { - DBG("Receiving reply failed on sock %d for size %lu with ret %d", + DBG("Receiving reply failed on sock %d for size %zu with ret %d", rsock->sock.fd, size, ret); } /* Always return -1 here and the caller can use errno. */ @@ -161,10 +169,12 @@ 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 *pathname, uint64_t *stream_id, + uint64_t tracefile_size, uint64_t tracefile_count) { int ret; struct lttcomm_relayd_add_stream msg; + struct lttcomm_relayd_add_stream_2_2 msg_2_2; struct lttcomm_relayd_status_stream reply; /* Code flow error. Safety net. */ @@ -174,13 +184,28 @@ int relayd_add_stream(struct lttcomm_relayd_sock *rsock, const char *channel_nam DBG("Relayd adding stream for channel name %s", channel_name); - strncpy(msg.channel_name, channel_name, sizeof(msg.channel_name)); - strncpy(msg.pathname, pathname, sizeof(msg.pathname)); + /* Compat with relayd 2.1 */ + if (rsock->minor == 1) { + strncpy(msg.channel_name, channel_name, sizeof(msg.channel_name)); + strncpy(msg.pathname, pathname, sizeof(msg.pathname)); - /* Send command */ - ret = send_command(rsock, RELAYD_ADD_STREAM, (void *) &msg, sizeof(msg), 0); - if (ret < 0) { - goto error; + /* Send command */ + ret = send_command(rsock, RELAYD_ADD_STREAM, (void *) &msg, sizeof(msg), 0); + if (ret < 0) { + goto error; + } + } else { + /* Compat with relayd 2.2+ */ + strncpy(msg_2_2.channel_name, channel_name, sizeof(msg_2_2.channel_name)); + strncpy(msg_2_2.pathname, pathname, sizeof(msg_2_2.pathname)); + msg_2_2.tracefile_size = htobe64(tracefile_size); + msg_2_2.tracefile_count = htobe64(tracefile_count); + + /* Send command */ + ret = send_command(rsock, RELAYD_ADD_STREAM, (void *) &msg_2_2, sizeof(msg_2_2), 0); + if (ret < 0) { + goto error; + } } /* Waiting for reply */ @@ -320,6 +345,13 @@ int relayd_connect(struct lttcomm_relayd_sock *rsock) /* Code flow error. Safety net. */ assert(rsock); + if (!rsock->sock.ops) { + /* + * Attempting a connect on a non-initialized socket. + */ + return -ECONNRESET; + } + DBG3("Relayd connect ..."); return rsock->sock.ops->connect(&rsock->sock); @@ -362,6 +394,7 @@ int relayd_close(struct lttcomm_relayd_sock *rsock) PERROR("relayd_close default close"); } } + rsock->sock.fd = -1; end: return ret; @@ -379,7 +412,11 @@ int relayd_send_data_hdr(struct lttcomm_relayd_sock *rsock, assert(rsock); assert(hdr); - DBG3("Relayd sending data header of size %ld", size); + if (rsock->sock.fd < 0) { + return -ECONNRESET; + } + + DBG3("Relayd sending data header of size %zu", size); /* Again, safety net */ if (size == 0) {