blob: bd3d88aae25cfbd6799f3ba373a5e173c658e112 [file] [log] [blame]
package org.eclipse.osee.ote.message.event;
import java.net.InetAddress;
import java.net.UnknownHostException;
import org.eclipse.osee.ote.message.Message;
import org.eclipse.osee.ote.message.data.MessageData;
import org.eclipse.osee.ote.message.elements.ArrayElement;
import org.eclipse.osee.ote.message.elements.EnumeratedElement;
import org.eclipse.osee.ote.message.elements.IntegerElement;
public class SOCKET_ADDRESS_RECORD extends ArrayElement{
public static final int SIZE = 21;
private final EnumeratedElement<ADDRESS_TYPE> type;
private final ArrayElement ipaddress;
private final IntegerElement port;
public SOCKET_ADDRESS_RECORD(Message msg, String elementName, MessageData messageData, int byteOffset, int msb, int lsb) {
super(msg, elementName, messageData, byteOffset, msb, lsb);
type = new EnumeratedElement<>(msg, "type", ADDRESS_TYPE.class, messageData, byteOffset, 0, 7);
ipaddress = new ArrayElement(msg, "ipaddress", messageData, byteOffset + 1, 0, 8*16-1);
port = new IntegerElement(msg, "port", messageData, ipaddress.getByteOffset() + 16, 0, 31);
}
public void setAddress(InetAddress address){
byte[] bytes = address.getAddress();
if(bytes.length == 4){
type.setValue(ADDRESS_TYPE.IPV4);
} else {
type.setValue(ADDRESS_TYPE.IPV6);
}
ipaddress.zeroize();
for(int i = 0; i < bytes.length; i++){
ipaddress.setValue(i, bytes[i]);
}
}
public InetAddress getAddress() throws UnknownHostException{
byte[] bytes = null;
if(type.getValue() == ADDRESS_TYPE.IPV4){
bytes = new byte[4];
for(int i = 0; i < 4; i++){
bytes[i] = ipaddress.getValue(i);
}
} else {
bytes = new byte[16];
for(int i = 0; i < 6; i++){
bytes[i] = ipaddress.getValue(i);
}
}
return InetAddress.getByAddress(bytes);
}
public int getPort(){
return port.getValue();
}
public void setPort(int port){
this.port.setValue(port);
}
}