void net_write_error (int sock, int version, char *driver_info, char *cas_info, int cas_info_size, int indicator, int code, char *msg) { size_t len = NET_SIZE_INT; size_t err_msg_len = 0; char err_msg[ERR_MSG_LENGTH]; assert (code != NO_ERROR); if (version >= CAS_MAKE_VER (8, 3, 0)) { len += NET_SIZE_INT; } err_msg_len = net_error_append_shard_info (err_msg, msg, ERR_MSG_LENGTH); if (err_msg_len > 0) { len += err_msg_len + 1; } net_write_int (sock, len); if (cas_info_size > 0) { net_write_stream (sock, cas_info, cas_info_size); } if (version >= CAS_MAKE_VER (8, 3, 0)) { net_write_int (sock, indicator); } if (!DOES_CLIENT_MATCH_THE_PROTOCOL (version, PROTOCOL_V2) && !cas_di_understand_renewed_error_code (driver_info) && code != NO_ERROR) { if (indicator == CAS_ERROR_INDICATOR || code == CAS_ER_NOT_AUTHORIZED_CLIENT) { code = CAS_CONV_ERROR_TO_OLD (code); } } net_write_int (sock, code); if (err_msg_len > 0) { net_write_stream (sock, err_msg, err_msg_len + 1); } }
T_BROKER_VERSION hm_get_broker_version (T_CON_HANDLE * con_handle) { T_BROKER_VERSION version = 0; if (con_handle->broker_info[BROKER_INFO_PROTO_VERSION] & CAS_PROTO_INDICATOR) { version = CAS_PROTO_UNPACK_NET_VER (con_handle-> broker_info[BROKER_INFO_PROTO_VERSION]); } else { version = CAS_MAKE_VER (con_handle->broker_info[BROKER_INFO_MAJOR_VERSION], con_handle->broker_info[BROKER_INFO_MINOR_VERSION], con_handle->broker_info[BROKER_INFO_PATCH_VERSION]); } return version; }