@Override public UnknownIpV4Option build() { return new UnknownIpV4Option(this); } }
@Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("[option-type: ") .append(type) .append("] [option-length: ") .append(getLengthAsInt()) .append(" bytes] [option-data: 0x") .append(ByteArrays.toHexString(data, "")) .append("]"); return sb.toString(); }
@Override public byte[] getRawData() { byte[] rawData = new byte[length()]; rawData[0] = type.value(); rawData[1] = length; System.arraycopy(data, 0, rawData, 2, data.length); return rawData; }
@Override public IpV4Option newInstance(byte[] rawData, int offset, int length) { try { return UnknownIpV4Option.newInstance(rawData, offset, length); } catch (IllegalRawDataException e) { return IllegalIpV4Option.newInstance(rawData, offset, length); } }
@Override public IpV4Option newInstance(byte[] rawData, int offset, int length) { try { return UnknownIpV4Option.newInstance(rawData, offset, length); } catch (IllegalRawDataException e) { return IllegalIpV4Option.newInstance(rawData, offset, length); } }
/** * A static factory method. This method validates the arguments by {@link * ByteArrays#validateBounds(byte[], int, int)}, which may throw exceptions undocumented here. * * @param rawData rawData * @param offset offset * @param length length * @return a new UnknownIpV4Option object. * @throws IllegalRawDataException if parsing the raw data fails. */ public static UnknownIpV4Option newInstance(byte[] rawData, int offset, int length) throws IllegalRawDataException { ByteArrays.validateBounds(rawData, offset, length); return new UnknownIpV4Option(rawData, offset, length); }
private UnknownIpV4Option(byte[] rawData, int offset, int length) throws IllegalRawDataException { if (length < 2) { StringBuilder sb = new StringBuilder(100); sb.append("The raw data length must be more than 1. rawData: ") .append(ByteArrays.toHexString(rawData, " ")) .append(", offset: ") .append(offset) .append(", length: ") .append(length); throw new IllegalRawDataException(sb.toString()); } this.type = IpV4OptionType.getInstance(rawData[offset]); this.length = rawData[1 + offset]; int lengthFieldAsInt = getLengthAsInt(); if (length < lengthFieldAsInt) { StringBuilder sb = new StringBuilder(100); sb.append("The raw data is too short to build this option (") .append(lengthFieldAsInt) .append("). data: ") .append(ByteArrays.toHexString(rawData, " ")) .append(", offset: ") .append(offset) .append(", length: ") .append(length); throw new IllegalRawDataException(sb.toString()); } this.data = ByteArrays.getSubArray(rawData, 2 + offset, lengthFieldAsInt - 2); }
private UnknownIpV4Option(Builder builder) { if (builder == null || builder.type == null || builder.data == null) { StringBuilder sb = new StringBuilder(); sb.append("builder: ") .append(builder) .append(" builder.type: ") .append(builder.type) .append(" builder.data: ") .append(builder.data); throw new NullPointerException(sb.toString()); } this.type = builder.type; this.data = new byte[builder.data.length]; System.arraycopy(builder.data, 0, this.data, 0, builder.data.length); if (builder.correctLengthAtBuild) { this.length = (byte) length(); } else { this.length = builder.length; } }
@Override public UnknownIpV4Option build() { return new UnknownIpV4Option(this); } }
@Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("[option-type: ") .append(type) .append("] [option-length: ") .append(getLengthAsInt()) .append(" bytes] [option-data: 0x") .append(ByteArrays.toHexString(data, "")) .append("]"); return sb.toString(); }
@Override public byte[] getRawData() { byte[] rawData = new byte[length()]; rawData[0] = type.value(); rawData[1] = length; System.arraycopy(data, 0, rawData, 2, data.length); return rawData; }
/** * A static factory method. This method validates the arguments by {@link * ByteArrays#validateBounds(byte[], int, int)}, which may throw exceptions undocumented here. * * @param rawData rawData * @param offset offset * @param length length * @return a new UnknownIpV4Option object. * @throws IllegalRawDataException if parsing the raw data fails. */ public static UnknownIpV4Option newInstance(byte[] rawData, int offset, int length) throws IllegalRawDataException { ByteArrays.validateBounds(rawData, offset, length); return new UnknownIpV4Option(rawData, offset, length); }
private UnknownIpV4Option(byte[] rawData, int offset, int length) throws IllegalRawDataException { if (length < 2) { StringBuilder sb = new StringBuilder(100); sb.append("The raw data length must be more than 1. rawData: ") .append(ByteArrays.toHexString(rawData, " ")) .append(", offset: ") .append(offset) .append(", length: ") .append(length); throw new IllegalRawDataException(sb.toString()); } this.type = IpV4OptionType.getInstance(rawData[offset]); this.length = rawData[1 + offset]; int lengthFieldAsInt = getLengthAsInt(); if (length < lengthFieldAsInt) { StringBuilder sb = new StringBuilder(100); sb.append("The raw data is too short to build this option (") .append(lengthFieldAsInt) .append("). data: ") .append(ByteArrays.toHexString(rawData, " ")) .append(", offset: ") .append(offset) .append(", length: ") .append(length); throw new IllegalRawDataException(sb.toString()); } this.data = ByteArrays.getSubArray(rawData, 2 + offset, lengthFieldAsInt - 2); }
private UnknownIpV4Option(Builder builder) { if (builder == null || builder.type == null || builder.data == null) { StringBuilder sb = new StringBuilder(); sb.append("builder: ") .append(builder) .append(" builder.type: ") .append(builder.type) .append(" builder.data: ") .append(builder.data); throw new NullPointerException(sb.toString()); } this.type = builder.type; this.data = new byte[builder.data.length]; System.arraycopy(builder.data, 0, this.data, 0, builder.data.length); if (builder.correctLengthAtBuild) { this.length = (byte) length(); } else { this.length = builder.length; } }