com.digitalpetri.enip.cip.structs.MessageRouterResponse Maven / Gradle / Ivy
package com.digitalpetri.enip.cip.structs;
import javax.annotation.Nonnull;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
public class MessageRouterResponse {
private final int serviceCode;
private final int generalStatus;
private final int[] additionalStatus;
private final ByteBuf data;
public MessageRouterResponse(int serviceCode,
int generalStatus,
int[] additionalStatus,
@Nonnull ByteBuf data) {
this.serviceCode = serviceCode;
this.generalStatus = generalStatus;
this.additionalStatus = additionalStatus;
this.data = data;
}
public int getServiceCode() {
return serviceCode;
}
public int getGeneralStatus() {
return generalStatus;
}
public int[] getAdditionalStatus() {
return additionalStatus;
}
@Nonnull
public ByteBuf getData() {
return data;
}
public static MessageRouterResponse decode(ByteBuf buffer) {
int serviceCode = buffer.readUnsignedByte();
buffer.skipBytes(1); // reserved
int generalStatus = buffer.readUnsignedByte();
int count = buffer.readUnsignedByte();
int[] additionalStatus = new int[count];
for (int i = 0; i < count; i++) {
additionalStatus[i] = buffer.readShort();
}
ByteBuf data = buffer.isReadable() ?
buffer.readSlice(buffer.readableBytes()).retain() : Unpooled.EMPTY_BUFFER;
return new MessageRouterResponse(serviceCode, generalStatus, additionalStatus, data);
}
}