public PeerParser(Cluster cluster, Connection conn, List <Peer> peers) { this.cluster = cluster; string command = (cluster.tlsPolicy != null) ? cluster.useServicesAlternate ? "peers-tls-alt" : "peers-tls-std" : cluster.useServicesAlternate ? "peers-clear-alt" : "peers-clear-std"; parser = new Info(conn, command); if (parser.length == 0) { throw new AerospikeException.Parse(command + " response is empty"); } parser.SkipToValue(); generation = parser.ParseInt(); parser.Expect(','); portDefault = parser.ParseInt(); parser.Expect(','); parser.Expect('['); // Reset peers peers.Clear(); if (parser.buffer[parser.offset] == ']') { return; } while (true) { Peer peer = ParsePeer(); peers.Add(peer); if (parser.offset < parser.length && parser.buffer[parser.offset] == ',') { parser.offset++; } else { break; } } }
private Host ParseHost() { string host; if (parser.buffer[parser.offset] == '[') { // IPV6 addresses can start with bracket. parser.offset++; host = parser.ParseString(']'); parser.offset++; } else { host = parser.ParseString(':', ',', ']'); } if (cluster.ipMap != null) { string alternativeHost; if (cluster.ipMap.TryGetValue(host, out alternativeHost)) { host = alternativeHost; } } if (parser.offset < parser.length) { byte b = parser.buffer[parser.offset]; if (b == ':') { parser.offset++; int port = parser.ParseInt(); return(new Host(host, tlsName, port)); } if (b == ',' || b == ']') { return(new Host(host, tlsName, portDefault)); } } string response = parser.GetTruncatedResponse(); throw new AerospikeException.Parse("Unterminated host in response: " + response); }