diff options
author | Emmanuel Vasilakis <mrzammler@mm.st> | 2022-05-20 09:02:25 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-05-20 09:02:25 +0300 |
commit | 05ef02a817c24ff4c5eae2d813387301b093e220 (patch) | |
tree | 39a348b6aa80048d01b9c984ca1e691a9e791ee7 /streaming/receiver.c | |
parent | 81c15a9bbb59f007b215363c1d24ee2cb66ecea1 (diff) |
Apply some logic to possible streaming destinations (#12866)
* replace connect_to_one_of with connect_to_one_of_destinations
* move functions from socket.c
* use sizeof
* move current destination pointer to host
* formatting
* use snprintfz
* get entries in same order
* handle single destination as before (or when it is the last of the list), instead of skiping it every other loop
* try other destinations on ssl problem
Diffstat (limited to 'streaming/receiver.c')
-rw-r--r-- | streaming/receiver.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/streaming/receiver.c b/streaming/receiver.c index c7879ea5b9..87f96039dc 100644 --- a/streaming/receiver.c +++ b/streaming/receiver.c @@ -466,9 +466,23 @@ static int rrdpush_receive(struct receiver_state *rpt) if (strcmp(rpt->machine_guid, localhost->machine_guid) == 0) { log_stream_connection(rpt->client_ip, rpt->client_port, rpt->key, rpt->machine_guid, rpt->hostname, "DENIED - ATTEMPT TO RECEIVE METRICS FROM MACHINE_GUID IDENTICAL TO PARENT"); - error("STREAM %s [receive from %s:%s]: denied to receive metrics, machine GUID [%s] is my own. Did you copy the parent/proxy machine GUID to a child?", rpt->hostname, rpt->client_ip, rpt->client_port, rpt->machine_guid); + error("STREAM %s [receive from %s:%s]: denied to receive metrics, machine GUID [%s] is my own. Did you copy the parent/proxy machine GUID to a child, or is this an inter-agent loop?", rpt->hostname, rpt->client_ip, rpt->client_port, rpt->machine_guid); + char initial_response[HTTP_HEADER_SIZE + 1]; + snprintfz(initial_response, HTTP_HEADER_SIZE, "%s", START_STREAMING_ERROR_SAME_LOCALHOST); +#ifdef ENABLE_HTTPS + rpt->host->stream_ssl.conn = rpt->ssl.conn; + rpt->host->stream_ssl.flags = rpt->ssl.flags; + if(send_timeout(&rpt->ssl, rpt->fd, initial_response, strlen(initial_response), 0, 60) != (ssize_t)strlen(initial_response)) { +#else + if(send_timeout(rpt->fd, initial_response, strlen(initial_response), 0, 60) != strlen(initial_response)) { +#endif + log_stream_connection(rpt->client_ip, rpt->client_port, rpt->key, rpt->host->machine_guid, rpt->host->hostname, "FAILED - CANNOT REPLY"); + error("STREAM %s [receive from [%s]:%s]: cannot send command.", rpt->host->hostname, rpt->client_ip, rpt->client_port); + close(rpt->fd); + return 0; + } close(rpt->fd); - return 1; + return 0; } if (rpt->host==NULL) { |