Ejemplo n.º 1
0
        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;
                }
            }
        }
Ejemplo n.º 2
0
        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);
        }