package com.intrbiz.bergamot.net.raw.jna;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Arrays;
import java.util.List;
import com.sun.jna.Structure;
/**
* Inet Socket Address
*/
public class SockAddrIn extends Structure
{
public short sin_family;
public byte[] sin_port;
public byte[] sin_addr;
public byte[] sin_zero = new byte[8];
public SockAddrIn(int family, byte[] addr, byte[] port)
{
super();
this.sin_family = (short) (family & 0xFFFF);
this.sin_port = port;
this.sin_addr = addr;
}
public SockAddrIn(InetAddress address, int port)
{
super();
this.sin_family = CLibrary.AF_INET;
this.sin_port = new byte[] { (byte) ((port >> 8) & 0xFF), (byte) (port & 0xFF) };
this.sin_addr = address.getAddress();
}
public SockAddrIn()
{
super();
this.sin_family = (short) 0;
this.sin_port = new byte[2];
this.sin_addr = new byte[4];
this.allocateMemory();
}
public InetAddress getAddress()
{
try
{
return InetAddress.getByAddress(this.sin_addr);
}
catch (UnknownHostException e)
{
}
return null;
}
public void setAddress(InetAddress address)
{
this.sin_addr = address.getAddress();
}
public int getPort()
{
return ((this.sin_port[0] & 0xFF) << 8) | (this.sin_port[0] & 0xFF);
}
public void setPort(int port)
{
this.sin_port = new byte[] { (byte) ((port >> 8) & 0xFF), (byte) (port & 0xFF) };
}
@Override
protected List<String> getFieldOrder()
{
return Arrays.asList("sin_family", "sin_port", "sin_addr", "sin_zero");
}
public static class ByReference extends SockAddrIn implements Structure.ByReference
{
public ByReference()
{
super();
}
public ByReference(InetAddress address, int port)
{
super(address, port);
}
public ByReference(int family, byte[] addr, byte[] port)
{
super(family, addr, port);
}
}
}