| 1 | // SPDX-License-Identifier: GPL-3.0-or-later |
| 2 | |
| 3 | #ifndef NETDATA_STREAM_HANDSHAKE_H |
| 4 | #define NETDATA_STREAM_HANDSHAKE_H |
| 5 | |
| 6 | #define HTTP_HEADER_SIZE 8192 |
| 7 | |
| 8 | #define STREAMING_PROTOCOL_VERSION "1.1" |
| 9 | #define START_STREAMING_PROMPT_V1 "Hit me baby, push them over..." |
| 10 | #define START_STREAMING_PROMPT_V2 "Hit me baby, push them over and bring the host labels..." |
| 11 | #define START_STREAMING_PROMPT_VN "Hit me baby, push them over with the version=" |
| 12 | |
| 13 | #define START_STREAMING_ERROR_SAME_LOCALHOST "Don't hit me baby, you are trying to stream my localhost back" |
| 14 | #define START_STREAMING_ERROR_LOCAL_VNODE "Don't hit me baby, you are trying to stream my vnode back" |
| 15 | #define START_STREAMING_ERROR_ALREADY_STREAMING "This GUID is already streaming to this server" |
| 16 | #define START_STREAMING_ERROR_NOT_PERMITTED "You are not permitted to access this. Check the logs for more info." |
| 17 | #define START_STREAMING_ERROR_BUSY_TRY_LATER "The server is too busy now to accept this request. Try later." |
| 18 | #define START_STREAMING_ERROR_INTERNAL_ERROR "The server encountered an internal error. Try later." |
| 19 | #define START_STREAMING_ERROR_INITIALIZATION "The server is initializing. Try later." |
| 20 | |
| 21 | typedef enum { |
| 22 | // negotiated version values |
| 23 | // IMPORTANT: maintain compatibility across netdata version - do not change these |
| 24 | STREAM_HANDSHAKE_OK_V3 = 3, // v3+ |
| 25 | STREAM_HANDSHAKE_OK_V2 = 2, // v2 |
| 26 | STREAM_HANDSHAKE_OK_V1 = 1, // v1 |
| 27 | STREAM_HANDSHAKE_NEVER = 0, // never tried to connect |
| 28 | STREAM_HANDSHAKE_CONNECT_HANDSHAKE_FAILED = -1, // sent by parent - DO NOT CHANGE |
| 29 | STREAM_HANDSHAKE_PARENT_IS_LOCALHOST = -2, // sent by parent - DO NOT CHANGE |
| 30 | STREAM_HANDSHAKE_PARENT_NODE_ALREADY_CONNECTED = -3, // sent by parent - DO NOT CHANGE |
| 31 | STREAM_HANDSHAKE_PARENT_DENIED_ACCESS = -4, // sent by parent - DO NOT CHANGE |
| 32 | STREAM_HANDSHAKE_CONNECT_SEND_TIMEOUT = -5, // generated by child |
| 33 | STREAM_HANDSHAKE_CONNECT_RECEIVE_TIMEOUT = -6, // generated by child |
| 34 | STREAM_HANDSHAKE_CONNECT_INVALID_CERTIFICATE = -7, // generated by child |
| 35 | STREAM_HANDSHAKE_CONNECT_SSL_ERROR = -8, // generated by child |
| 36 | STREAM_HANDSHAKE_CONNECTION_FAILED = -9, // generated by child |
| 37 | STREAM_HANDSHAKE_PARENT_BUSY_TRY_LATER = -10, // sent by parent - DO NOT CHANGE |
| 38 | STREAM_HANDSHAKE_PARENT_INTERNAL_ERROR = -11, // sent by parent - DO NOT CHANGE |
| 39 | STREAM_HANDSHAKE_PARENT_IS_INITIALIZING = -12, // sent by parent - DO NOT CHANGE |
| 40 | |
| 41 | // --- internal handshake reasons --- |
| 42 | |
| 43 | // receiver-only codes |
| 44 | STREAM_HANDSHAKE_RCV_DISCONNECT_PARSER_FAILED = -13, |
| 45 | STREAM_HANDSHAKE_RCV_DISCONNECT_STALE_RECEIVER = -14, |
| 46 | STREAM_HANDSHAKE_RCV_DECOMPRESSION_FAILED = -15, |
| 47 | |
| 48 | // sender-only codes |
| 49 | STREAM_HANDSHAKE_SND_DISCONNECT_HOST_CLEANUP = -16, |
| 50 | STREAM_HANDSHAKE_SND_DISCONNECT_COMPRESSION_FAILED = -17, |
| 51 | STREAM_HANDSHAKE_SND_DISCONNECT_HTTP_UPGRADE_FAILED = -18, |
| 52 | STREAM_HANDSHAKE_SND_DISCONNECT_RECEIVER_LEFT = -19, // used only in pulse |
| 53 | STREAM_HANDSHAKE_SND_VNODE_IS_STALE = -20, // used only in pulse |
| 54 | |
| 55 | // receiver and sender codes |
| 56 | STREAM_HANDSHAKE_DISCONNECT_SIGNALED_TO_STOP = -21, // a fallback when (s|rpt)->exit.reason is not set |
| 57 | STREAM_HANDSHAKE_DISCONNECT_SHUTDOWN = -22, |
| 58 | STREAM_HANDSHAKE_DISCONNECT_SOCKET_READ_FAILED = -23, |
| 59 | STREAM_HANDSHAKE_DISCONNECT_SOCKET_WRITE_FAILED = -24, |
| 60 | STREAM_HANDSHAKE_DISCONNECT_SOCKET_ERROR = -25, |
| 61 | STREAM_HANDSHAKE_DISCONNECT_TIMEOUT = -26, |
| 62 | STREAM_HANDSHAKE_DISCONNECT_SOCKET_CLOSED_BY_REMOTE = -27, |
| 63 | STREAM_HANDSHAKE_DISCONNECT_BUFFER_OVERFLOW = -28, |
| 64 | STREAM_HANDSHAKE_DISCONNECT_REPLICATION_STALLED = -29, |
| 65 | |
| 66 | // sender (stream parents - SP) failures to connect |
| 67 | STREAM_HANDSHAKE_SP_PREPARING = -30, |
| 68 | STREAM_HANDSHAKE_SP_NO_HOST_IN_DESTINATION = -31, |
| 69 | STREAM_HANDSHAKE_SP_CONNECT_TIMEOUT = -32, |
| 70 | STREAM_HANDSHAKE_SP_CONNECTION_REFUSED = -33, |
| 71 | STREAM_HANDSHAKE_SP_CANT_RESOLVE_HOSTNAME = -34, |
| 72 | STREAM_HANDSHAKE_SP_CONNECTING = -35, |
| 73 | STREAM_HANDSHAKE_SP_CONNECTED = -36, |
| 74 | STREAM_HANDSHAKE_SP_NO_STREAM_INFO = -37, |
| 75 | STREAM_HANDSHAKE_SP_NO_DESTINATION = -38, |
| 76 | STREAM_HANDSHAKE_PARENT_VNODE_IS_LOCAL = -39, // sent by parent - DO NOT CHANGE |
| 77 | |
| 78 | // terminator - keep this positive, bigger than all negative values |
| 79 | STREAM_HANDSHAKE_NEGATIVE_MAX = 40, |
| 80 | } STREAM_HANDSHAKE; |
| 81 | |
| 82 | const char *stream_handshake_error_to_string(STREAM_HANDSHAKE reason); |
| 83 | int stream_handshake_error_to_response_code(STREAM_HANDSHAKE reason); |
| 84 | |
| 85 | #endif //NETDATA_STREAM_HANDSHAKE_H |