/** @return a new DnsDomainName object. */ public DnsDomainName build() { return new DnsDomainName(this); } }
/** * @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>()); }
@Override public boolean equals(Object obj) { if (obj == this) { return true; } if (!this.getClass().isInstance(obj)) { return false; } DnsRDataCName other = (DnsRDataCName) obj; return cName.equals(other.cName); }
private DnsRDataMInfo(byte[] rawData, int offset, int length) throws IllegalRawDataException { this.rMailBx = DnsDomainName.newInstance(rawData, offset, length); int rMailBxLen = rMailBx.length(); if (rMailBxLen == length) { StringBuilder sb = new StringBuilder(200); sb.append("The data is too short to build eMailBx in DnsRDataMInfo. data: ") .append(ByteArrays.toHexString(rawData, " ")) .append(", offset: ") .append(offset) .append(", length: ") .append(length); throw new IllegalRawDataException(sb.toString()); } this.eMailBx = DnsDomainName.newInstance(rawData, offset + rMailBxLen, length - rMailBxLen); }
@Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + exchange.hashCode(); result = prime * result + preference; return result; }
@Override public byte[] getRawData() { return mgMName.getRawData(); }
private String convertToString(String indent, byte[] headerRawData) { StringBuilder sb = new StringBuilder(); String ls = System.getProperty("line.separator"); sb.append(indent) .append("MG RDATA:") .append(ls) .append(indent) .append(" MGMNAME: ") .append(headerRawData != null ? mgMName.toString(headerRawData) : mgMName.toString()) .append(ls); return sb.toString(); }
@Override public int length() { return nsDName.length(); }
private DnsRDataMg(byte[] rawData, int offset, int length) throws IllegalRawDataException { this.mgMName = DnsDomainName.newInstance(rawData, offset, length); }
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(); } }
private DnsDomainName(Builder builder) { if (builder == null || builder.labels == null) { StringBuilder sb = new StringBuilder(); sb.append("builder").append(builder).append(" builder.labels: ").append(builder.labels); throw new NullPointerException(sb.toString()); } for (String label : builder.labels) { if (label.getBytes().length > 63) { throw new IllegalArgumentException( "Length of a label must be less than 64. label: " + label); } } if (builder.pointer != null && (builder.pointer & 0xC000) != 0) { throw new IllegalArgumentException( "(builder.pointer & 0xC000) must be zero. builder.pointer: " + builder.pointer); } this.labels = new ArrayList<String>(builder.labels); this.name = joinLabels(labels); this.pointer = builder.pointer; }
private DnsQuestion(byte[] rawData, int offset, int length) throws IllegalRawDataException { int cursor = 0; this.qName = DnsDomainName.newInstance(rawData, offset, length); cursor += qName.length(); if (length - cursor < SHORT_SIZE_IN_BYTES * 2) { StringBuilder sb = new StringBuilder(200); sb.append("The data is too short to build qType an qClass of DnsQuestion. data: ") .append(ByteArrays.toHexString(rawData, " ")) .append(", offset: ") .append(offset) .append(", length: ") .append(length) .append(", cursor: ") .append(cursor); throw new IllegalRawDataException(sb.toString()); } this.qType = DnsResourceRecordType.getInstance(ByteArrays.getShort(rawData, offset + cursor)); cursor += SHORT_SIZE_IN_BYTES; this.qClass = DnsClass.getInstance(ByteArrays.getShort(rawData, offset + cursor)); }
@Override public byte[] getRawData() { return newName.getRawData(); }
private String convertToString(String indent, byte[] headerRawData) { StringBuilder sb = new StringBuilder(); String ls = System.getProperty("line.separator"); sb.append(indent) .append("PTR RDATA:") .append(ls) .append(indent) .append(" PTRDNAME: ") .append(headerRawData != null ? ptrDName.toString(headerRawData) : ptrDName.toString()) .append(ls); return sb.toString(); }
@Override public int length() { return ptrDName.length(); }
private DnsRDataMb(byte[] rawData, int offset, int length) throws IllegalRawDataException { this.maDName = DnsDomainName.newInstance(rawData, offset, length); }
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(); } }
this.name = joinLabels(labels);
private DnsRDataSoa(byte[] rawData, int offset, int length) throws IllegalRawDataException { int cursor = 0; this.mName = DnsDomainName.newInstance(rawData, offset, length); int mNameLen = mName.length(); cursor += mNameLen; if (cursor == length) { this.rName = DnsDomainName.newInstance(rawData, offset + cursor, length - cursor); int rNameLen = rName.length(); cursor += rNameLen; if (cursor + INT_SIZE_IN_BYTES * 5 > length) {