/// <summary> /// Parses address from system table query response and translates it using the provided <paramref name="translator"/>. /// </summary> internal IPEndPoint GetRpcEndPoint(bool isPeersV2, IRow row, IAddressTranslator translator, int defaultPort) { IPAddress address; address = isPeersV2 ? GetRpcAddressFromPeersV2(row) : GetRpcAddressFromLocalPeersV1(row); if (address == null) { return(null); } if (TopologyRefresher.BindAllAddress.Equals(address)) { if (row.ContainsColumn("peer") && !row.IsNull("peer")) { // system.peers address = row.GetValue <IPAddress>("peer"); } else if (row.ContainsColumn("broadcast_address") && !row.IsNull("broadcast_address")) { // system.local address = row.GetValue <IPAddress>("broadcast_address"); } else if (row.ContainsColumn("listen_address") && !row.IsNull("listen_address")) { // system.local address = row.GetValue <IPAddress>("listen_address"); } else { ControlConnection.Logger.Error( "Found host with 0.0.0.0 as rpc_address and nulls as listen_address and broadcast_address. " + "Because of this, the driver can not connect to this node."); return(null); } ControlConnection.Logger.Warning( "Found host with 0.0.0.0 as rpc_address, using listen_address ({0}) to contact it instead. " + "If this is incorrect you should avoid the use of 0.0.0.0 server side.", address.ToString()); } var rpcPort = defaultPort; if (isPeersV2) { var nullableRpcPort = GetRpcPortFromPeersV2(row); if (nullableRpcPort == null) { ControlConnection.Logger.Warning( "Found host with NULL native_port, using default port ({0}) to contact it instead. ", rpcPort); } else { rpcPort = nullableRpcPort.Value; } } return(translator.Translate(new IPEndPoint(address, rpcPort))); }
/// <summary> /// Uses system.peers values to build the Address translator /// </summary> internal static IPEndPoint GetAddressForPeerHost(Row row, IAddressTranslator translator, int port) { var address = row.GetValue <IPAddress>("rpc_address"); if (address == null) { return(null); } if (BindAllAddress.Equals(address) && !row.IsNull("peer")) { address = row.GetValue <IPAddress>("peer"); _logger.Warning(String.Format("Found host with 0.0.0.0 as rpc_address, using listen_address ({0}) to contact it instead. If this is incorrect you should avoid the use of 0.0.0.0 server side.", address)); } return(translator.Translate(new IPEndPoint(address, port))); }
/// <summary> /// Uses system.peers values to build the Address translator /// </summary> internal static IPEndPoint GetAddressForPeerHost(Row row, IAddressTranslator translator, int port) { var address = row.GetValue<IPAddress>("rpc_address"); if (address == null) { return null; } if (BindAllAddress.Equals(address) && !row.IsNull("peer")) { address = row.GetValue<IPAddress>("peer"); _logger.Warning(String.Format("Found host with 0.0.0.0 as rpc_address, using listen_address ({0}) to contact it instead. If this is incorrect you should avoid the use of 0.0.0.0 server side.", address)); } return translator.Translate(new IPEndPoint(address, port)); }
/// <summary> /// Translates Cassandra node address. /// </summary> /// <param name="address">Source address.</param> /// <returns>Result address.</returns> private IPEndPoint TranslateAddress(IPEndPoint address) { return(_addressTranslator.Translate(address) ?? address); }