@Override public InetAddress parse(Object value, boolean coerce) { if (value instanceof InetAddress) { return (InetAddress) value; } else { if (value instanceof BytesRef) { value = ((BytesRef) value).utf8ToString(); } return InetAddresses.forString(value.toString()); } } @Override
private InetAddress parse(Object value) { if (value instanceof InetAddress) { return (InetAddress) value; } else { if (value instanceof BytesRef) { value = ((BytesRef) value).utf8ToString(); } return InetAddresses.forString(value.toString()); } }
/** * Parse an IP address and its prefix length using the CIDR notation. * @throws IllegalArgumentException if the string is not formatted as {@code ip_address/prefix_length} * @throws IllegalArgumentException if the IP address is an IPv6-mapped ipv4 address * @throws IllegalArgumentException if the prefix length is not in 0-32 for IPv4 addresses and 0-128 for IPv6 addresses * @throws NumberFormatException if the prefix length is not an integer */ public static Tuple<InetAddress, Integer> parseCidr(String maskedAddress) { String[] fields = maskedAddress.split("/"); if (fields.length == 2) { final String addressString = fields[0]; final InetAddress address = forString(addressString); if (addressString.contains(":") && address.getAddress().length == 4) { throw new IllegalArgumentException("CIDR notation is not allowed with IPv6-mapped IPv4 address [" + addressString + " as it introduces ambiguity as to whether the prefix length should be interpreted as a v4 prefix length or a" + " v6 prefix length"); } final int prefixLength = Integer.parseInt(fields[1]); if (prefixLength < 0 || prefixLength > 8 * address.getAddress().length) { throw new IllegalArgumentException("Illegal prefix length [" + prefixLength + "] in [" + maskedAddress + "]. Must be 0-32 for IPv4 ranges, 0-128 for IPv6 ranges"); } return new Tuple<>(address, prefixLength); } else { throw new IllegalArgumentException("Expected [ip/prefix] but was [" + maskedAddress + "]"); } } }
@Override public InetAddress parseTo(RangeFieldType fieldType, XContentParser parser, boolean coerce, boolean included) throws IOException { InetAddress address = InetAddresses.forString(parser.text()); return included ? address : nextDown(address); } @Override
@Override public InetAddress parseFrom(RangeFieldType fieldType, XContentParser parser, boolean coerce, boolean included) throws IOException { InetAddress address = InetAddresses.forString(parser.text()); return included ? address : nextUp(address); } @Override
private static BytesRef toBytesRef(String ip) { if (ip == null) { return null; } InetAddress address = InetAddresses.forString(ip); byte[] bytes = InetAddressPoint.encode(address); return new BytesRef(bytes); }
@Override public BytesRef parseBytesRef(String value) { return new BytesRef(InetAddressPoint.encode(InetAddresses.forString(value))); } };
addressBytes = InetAddresses.forString(fields[0]).getAddress(); } catch (Exception e) { throw new IllegalArgumentException(
@Override public Mapper.Builder<?,?> parse(String name, Map<String, Object> node, ParserContext parserContext) throws MapperParsingException { Builder builder = new Builder(name); TypeParsers.parseField(builder, name, node, parserContext); for (Iterator<Map.Entry<String, Object>> iterator = node.entrySet().iterator(); iterator.hasNext();) { Map.Entry<String, Object> entry = iterator.next(); String propName = entry.getKey(); Object propNode = entry.getValue(); if (propName.equals("null_value")) { if (propNode == null) { throw new MapperParsingException("Property [null_value] cannot be null."); } builder.nullValue(InetAddresses.forString(propNode.toString())); iterator.remove(); } else if (propName.equals("ignore_malformed")) { builder.ignoreMalformed(TypeParsers.nodeBooleanValue(name, "ignore_malformed", propNode, parserContext)); iterator.remove(); } else if (TypeParsers.parseMultiField(builder, name, parserContext, propName, propNode)) { iterator.remove(); } } return builder; } }
@Override public Query termsQuery(List<?> values, QueryShardContext context) { InetAddress[] addresses = new InetAddress[values.size()]; int i = 0; for (Object value : values) { InetAddress address; if (value instanceof InetAddress) { address = (InetAddress) value; } else { if (value instanceof BytesRef) { value = ((BytesRef) value).utf8ToString(); } if (value.toString().contains("/")) { // the `terms` query contains some prefix queries, so we cannot create a set query // and need to fall back to a disjunction of `term` queries return super.termsQuery(values, context); } address = InetAddresses.forString(value.toString()); } addresses[i++] = address; } return InetAddressPoint.newSetQuery(name(), addresses); }
@Override public Query termQuery(Object value, @Nullable QueryShardContext context) { failIfNotIndexed(); if (value instanceof InetAddress) { return InetAddressPoint.newExactQuery(name(), (InetAddress) value); } else { if (value instanceof BytesRef) { value = ((BytesRef) value).utf8ToString(); } String term = value.toString(); if (term.contains("/")) { final Tuple<InetAddress, Integer> cidr = InetAddresses.parseCidr(term); return InetAddressPoint.newPrefixQuery(name(), cidr.v1(), cidr.v2()); } InetAddress address = InetAddresses.forString(term); return InetAddressPoint.newExactQuery(name(), address); } }
@Override public InetAddress parse(Object value, boolean coerce) { return value instanceof InetAddress ? (InetAddress) value : InetAddresses.forString((String) value); } @Override
private InetAddress parse(Object value) { if (value instanceof InetAddress) { return (InetAddress) value; } else { if (value instanceof BytesRef) { value = ((BytesRef) value).utf8ToString(); } return InetAddresses.forString(value.toString()); } }
} else { try { address = InetAddresses.forString(addressAsString); } catch (IllegalArgumentException e) { if (ignoreMalformed.value()) {
@Override public InetAddress parseTo(RangeFieldType fieldType, XContentParser parser, boolean coerce, boolean included) throws IOException { InetAddress address = InetAddresses.forString(parser.text()); return included ? address : nextDown(address); } @Override
@Override public InetAddress parseFrom(RangeFieldType fieldType, XContentParser parser, boolean coerce, boolean included) throws IOException { InetAddress address = InetAddresses.forString(parser.text()); return included ? address : nextUp(address); } @Override
private static BytesRef toBytesRef(String ip) { if (ip == null) { return null; } InetAddress address = InetAddresses.forString(ip); byte[] bytes = InetAddressPoint.encode(address); return new BytesRef(bytes); }
@Override public InetAddress parseFrom(RangeFieldType fieldType, XContentParser parser, boolean coerce, boolean included) throws IOException { InetAddress address = InetAddresses.forString(parser.text()); return included ? address : nextUp(address); } @Override
@Override public InetAddress parseTo(RangeFieldType fieldType, XContentParser parser, boolean coerce, boolean included) throws IOException { InetAddress address = InetAddresses.forString(parser.text()); return included ? address : nextDown(address); } @Override