package com.intrbiz.bergamot.net.raw.jna;
import java.nio.ByteBuffer;
import com.sun.jna.LastErrorException;
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
/**
* JNA bindings to native raw sockets
*/
public interface CLibrary extends Library
{
/*
* Constants
*/
public static final class ErroNo
{
public static final int EPERM = 1; /* Operation not permitted */
public static final int ENOENT = 2; /* No such file or directory */
public static final int ESRCH = 3; /* No such process */
public static final int EINTR = 4; /* Interrupted system call */
public static final int EIO = 5; /* I/O error */
public static final int ENXIO = 6; /* No such device or address */
public static final int E2BIG = 7; /* Argument list too long */
public static final int ENOEXEC = 8; /* Exec format error */
public static final int EBADF = 9; /* Bad file number */
public static final int ECHILD = 10; /* No child processes */
public static final int EAGAIN = 11; /* Try again */
public static final int ENOMEM = 12; /* Out of memory */
public static final int EACCES = 13; /* Permission denied */
public static final int EFAULT = 14; /* Bad address */
public static final int ENOTBLK = 15; /* Block device required */
public static final int EBUSY = 16; /* Device or resource busy */
public static final int EEXIST = 17; /* File exists */
public static final int EXDEV = 18; /* Cross-device link */
public static final int ENODEV = 19; /* No such device */
public static final int ENOTDIR = 20; /* Not a directory */
public static final int EISDIR = 21; /* Is a directory */
public static final int EINVAL = 22; /* Invalid argument */
public static final int ENFILE = 23; /* File table overflow */
public static final int EMFILE = 24; /* Too many open files */
public static final int ENOTTY = 25; /* Not a typewriter */
public static final int ETXTBSY = 26; /* Text file busy */
public static final int EFBIG = 27; /* File too large */
public static final int ENOSPC = 28; /* No space left on device */
public static final int ESPIPE = 29; /* Illegal seek */
public static final int EROFS = 30; /* Read-only file system */
public static final int EMLINK = 31; /* Too many links */
public static final int EPIPE = 32; /* Broken pipe */
public static final int EDOM = 33; /* Math argument out of domain of func */
public static final int ERANGE = 34; /* Math result not representable */
}
/* Address Families */
public static final int AF_INET = 2;
public static final int AF_INET6 = 10;
/* Socket types */
public static final int SOCK_STREAM = 1;
public static final int SOCK_DGRAM = 2;
public static final int SOCK_RAW = 3;
/* IP Protocols */
public static final int IPPROTO_IP = 0;
public static final int IPPROTO_ICMP = 1;
public static final int IPPROTO_TCP = 6;
public static final int IPPROTO_UDP = 17;
public static final int IPPROTO_RAW = 255;
/* Socket flags */
public static final int MSG_DONTWAIT = 0x40;
public static final int SO_RCVTIMEO = 20;
public static final int SOL_SOCKET = 1;
/*
* Access the library
*/
CLibrary INSTANCE = (CLibrary) Native.loadLibrary("c", CLibrary.class);
/*
* Marshalled functions
*/
int socket(int domain, int type, int protocol) throws LastErrorException;
int getsockopt(int sockfd, int level, int optname, Pointer optval, Pointer optlen) throws LastErrorException;
int setsockopt(int sockfd, int level, int optname, Pointer optval, int optlen) throws LastErrorException;
int sendto(int fd, ByteBuffer buffer, int length, int flags, SockAddrIn.ByReference addr, int addrlen);
int recv(int fd, ByteBuffer buffer, int length, int flags);
int close(int fd) throws LastErrorException;
}