/** * @param headerRawData the raw data of the DNS header including this domain name. * @return decompressed name. * @throws IllegalRawDataException if an error occurred during decompression or circular reference * is detected. */ public String decompress(byte[] headerRawData) throws IllegalRawDataException { if (headerRawData == null) { throw new NullPointerException("headerRawData is null."); } return decompress(headerRawData, new ArrayList<Short>()); }
String decompressedName; try { decompressedName = decompress(headerRawData); } catch (IllegalRawDataException e) { LOG.error("Error occurred during building complete name.", e);
private String decompress(byte[] headerRawData, List<Short> pointers) throws IllegalRawDataException { if (pointer == null) { return name; } else { if (pointers.contains(pointer)) { StringBuilder sb = new StringBuilder(200); sb.append("Circular reference detected. data: ") .append(ByteArrays.toHexString(headerRawData, " ")) .append(", offset: ") .append(pointer) .append(", name: ") .append(name); throw new IllegalRawDataException(sb.toString()); } pointers.add(pointer); StringBuilder sb = new StringBuilder(); sb.append(name) .append(".") .append( new DnsDomainName(headerRawData, pointer, headerRawData.length - pointer) .decompress(headerRawData, pointers)); return sb.toString(); } }
/** * @param headerRawData the raw data of the DNS header including this domain name. * @return decompressed name. * @throws IllegalRawDataException if an error occurred during decompression or circular reference * is detected. */ public String decompress(byte[] headerRawData) throws IllegalRawDataException { if (headerRawData == null) { throw new NullPointerException("headerRawData is null."); } return decompress(headerRawData, new ArrayList<Short>()); }
String decompressedName; try { decompressedName = decompress(headerRawData); } catch (IllegalRawDataException e) { LOG.error("Error occurred during building complete name.", e);
private String decompress(byte[] headerRawData, List<Short> pointers) throws IllegalRawDataException { if (pointer == null) { return name; } else { if (pointers.contains(pointer)) { StringBuilder sb = new StringBuilder(200); sb.append("Circular reference detected. data: ") .append(ByteArrays.toHexString(headerRawData, " ")) .append(", offset: ") .append(pointer) .append(", name: ") .append(name); throw new IllegalRawDataException(sb.toString()); } pointers.add(pointer); StringBuilder sb = new StringBuilder(); sb.append(name) .append(".") .append( new DnsDomainName(headerRawData, pointer, headerRawData.length - pointer) .decompress(headerRawData, pointers)); return sb.toString(); } }