| 116 | |
| 117 | |
| 118 | void ClientInfo::write(WriteBuffer & out, UInt64 server_protocol_revision, bool with_client_agent) const |
| 119 | { |
| 120 | if (server_protocol_revision < DBMS_MIN_REVISION_WITH_CLIENT_INFO) |
| 121 | throw Exception(ErrorCodes::LOGICAL_ERROR, "Method ClientInfo::write is called for unsupported server revision"); |
| 122 | |
| 123 | writeBinary(static_cast<UInt8>(query_kind), out); |
| 124 | if (empty()) |
| 125 | return; |
| 126 | |
| 127 | writeBinary(initial_user, out); |
| 128 | writeBinary(initial_query_id, out); |
| 129 | writeBinary(initial_address->toString(), out); |
| 130 | |
| 131 | if (server_protocol_revision >= DBMS_MIN_PROTOCOL_VERSION_WITH_INITIAL_QUERY_START_TIME) |
| 132 | writeBinary(initial_query_start_time_microseconds, out); |
| 133 | |
| 134 | writeBinary(static_cast<UInt8>(interface), out); |
| 135 | |
| 136 | if (interface == Interface::TCP) |
| 137 | { |
| 138 | writeBinary(os_user, out); |
| 139 | writeBinary(client_hostname, out); |
| 140 | writeBinary(client_name, out); |
| 141 | writeVarUInt(client_version_major, out); |
| 142 | writeVarUInt(client_version_minor, out); |
| 143 | writeVarUInt(client_tcp_protocol_version, out); |
| 144 | } |
| 145 | else if (interface == Interface::HTTP) |
| 146 | { |
| 147 | writeBinary(static_cast<UInt8>(http_method), out); |
| 148 | writeBinary(http_user_agent, out); |
| 149 | |
| 150 | if (server_protocol_revision >= DBMS_MIN_REVISION_WITH_X_FORWARDED_FOR_IN_CLIENT_INFO) |
| 151 | writeBinary(forwarded_for, out); |
| 152 | |
| 153 | if (server_protocol_revision >= DBMS_MIN_REVISION_WITH_REFERER_IN_CLIENT_INFO) |
| 154 | writeBinary(http_referer, out); |
| 155 | } |
| 156 | |
| 157 | if (server_protocol_revision >= DBMS_MIN_REVISION_WITH_QUOTA_KEY_IN_CLIENT_INFO) |
| 158 | writeBinary(quota_key, out); |
| 159 | |
| 160 | if (server_protocol_revision >= DBMS_MIN_PROTOCOL_VERSION_WITH_DISTRIBUTED_DEPTH) |
| 161 | writeVarUInt(distributed_depth, out); |
| 162 | |
| 163 | if (interface == Interface::TCP) |
| 164 | { |
| 165 | if (server_protocol_revision >= DBMS_MIN_REVISION_WITH_VERSION_PATCH) |
| 166 | writeVarUInt(client_version_patch, out); |
| 167 | } |
| 168 | |
| 169 | if (server_protocol_revision >= DBMS_MIN_REVISION_WITH_OPENTELEMETRY) |
| 170 | { |
| 171 | if (client_trace_context.trace_id != UUID()) |
| 172 | { |
| 173 | // Have OpenTelemetry header. |
| 174 | writeBinary(uint8_t(1), out); |
| 175 | // No point writing these numbers with variable length, because they |
no test coverage detected