/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class jtux_UNetwork */

#ifndef _Included_jtux_UNetwork
#define _Included_jtux_UNetwork
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     jtux_UNetwork
 * Method:    accept
 * Signature: (ILjtux/UNetwork$s_sockaddr;Ljtux/UUtil$IntHolder;)I
 */
JNIEXPORT jint JNICALL Java_jtux_UNetwork_accept
  (JNIEnv *, jclass, jint, jobject, jobject);

/*
 * Class:     jtux_UNetwork
 * Method:    bind
 * Signature: (ILjtux/UNetwork$s_sockaddr;I)V
 */
JNIEXPORT void JNICALL Java_jtux_UNetwork_bind
  (JNIEnv *, jclass, jint, jobject, jint);

/*
 * Class:     jtux_UNetwork
 * Method:    connect
 * Signature: (ILjtux/UNetwork$s_sockaddr;I)V
 */
JNIEXPORT void JNICALL Java_jtux_UNetwork_connect
  (JNIEnv *, jclass, jint, jobject, jint);

/*
 * Class:     jtux_UNetwork
 * Method:    freeaddrinfo
 * Signature: (Ljtux/UNetwork$s_addrinfo;)V
 */
JNIEXPORT void JNICALL Java_jtux_UNetwork_freeaddrinfo
  (JNIEnv *, jclass, jobject);

/*
 * Class:     jtux_UNetwork
 * Method:    gai_strerror
 * Signature: (I)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_jtux_UNetwork_gai_1strerror
  (JNIEnv *, jclass, jint);

/*
 * Class:     jtux_UNetwork
 * Method:    getaddrinfo
 * Signature: (Ljava/lang/String;Ljava/lang/String;Ljtux/UNetwork$s_addrinfo;Ljtux/UNetwork$AddrInfoListHead;)V
 */
JNIEXPORT void JNICALL Java_jtux_UNetwork_getaddrinfo
  (JNIEnv *, jclass, jstring, jstring, jobject, jobject);

/*
 * Class:     jtux_UNetwork
 * Method:    gethostid
 * Signature: ()J
 */
JNIEXPORT jlong JNICALL Java_jtux_UNetwork_gethostid
  (JNIEnv *, jclass);

/*
 * Class:     jtux_UNetwork
 * Method:    gethostname
 * Signature: (Ljava/lang/StringBuffer;)V
 */
JNIEXPORT void JNICALL Java_jtux_UNetwork_gethostname
  (JNIEnv *, jclass, jobject);

/*
 * Class:     jtux_UNetwork
 * Method:    getnameinfo
 * Signature: (Ljtux/UNetwork$s_sockaddr;ILjava/lang/StringBuffer;Ljava/lang/StringBuffer;I)V
 */
JNIEXPORT void JNICALL Java_jtux_UNetwork_getnameinfo
  (JNIEnv *, jclass, jobject, jint, jobject, jobject, jint);

/*
 * Class:     jtux_UNetwork
 * Method:    getsockopt
 * Signature: (IIILjtux/UNetwork$SockOptValue;Ljtux/UUtil$IntHolder;)V
 */
JNIEXPORT void JNICALL Java_jtux_UNetwork_getsockopt
  (JNIEnv *, jclass, jint, jint, jint, jobject, jobject);

/*
 * Class:     jtux_UNetwork
 * Method:    htonl
 * Signature: (I)I
 */
JNIEXPORT jint JNICALL Java_jtux_UNetwork_htonl
  (JNIEnv *, jclass, jint);

/*
 * Class:     jtux_UNetwork
 * Method:    htons
 * Signature: (S)S
 */
JNIEXPORT jshort JNICALL Java_jtux_UNetwork_htons
  (JNIEnv *, jclass, jshort);

/*
 * Class:     jtux_UNetwork
 * Method:    inet_ntop
 * Signature: (II)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_jtux_UNetwork_inet_1ntop__II
  (JNIEnv *, jclass, jint, jint);

/*
 * Class:     jtux_UNetwork
 * Method:    inet_ntop
 * Signature: (I[B)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_jtux_UNetwork_inet_1ntop__I_3B
  (JNIEnv *, jclass, jint, jbyteArray);

/*
 * Class:     jtux_UNetwork
 * Method:    inet_pton
 * Signature: (ILjava/lang/String;Ljtux/UUtil$IntHolder;)V
 */
JNIEXPORT void JNICALL Java_jtux_UNetwork_inet_1pton__ILjava_lang_String_2Ljtux_UUtil_00024IntHolder_2
  (JNIEnv *, jclass, jint, jstring, jobject);

/*
 * Class:     jtux_UNetwork
 * Method:    inet_pton
 * Signature: (ILjava/lang/String;[B)V
 */
JNIEXPORT void JNICALL Java_jtux_UNetwork_inet_1pton__ILjava_lang_String_2_3B
  (JNIEnv *, jclass, jint, jstring, jbyteArray);

/*
 * Class:     jtux_UNetwork
 * Method:    listen
 * Signature: (II)V
 */
JNIEXPORT void JNICALL Java_jtux_UNetwork_listen
  (JNIEnv *, jclass, jint, jint);

/*
 * Class:     jtux_UNetwork
 * Method:    ntohl
 * Signature: (I)I
 */
JNIEXPORT jint JNICALL Java_jtux_UNetwork_ntohl
  (JNIEnv *, jclass, jint);

/*
 * Class:     jtux_UNetwork
 * Method:    ntohs
 * Signature: (S)S
 */
JNIEXPORT jshort JNICALL Java_jtux_UNetwork_ntohs
  (JNIEnv *, jclass, jshort);

/*
 * Class:     jtux_UNetwork
 * Method:    recv
 * Signature: (I[BII)I
 */
JNIEXPORT jint JNICALL Java_jtux_UNetwork_recv
  (JNIEnv *, jclass, jint, jbyteArray, jint, jint);

/*
 * Class:     jtux_UNetwork
 * Method:    recvfrom
 * Signature: (I[BIILjtux/UNetwork$s_sockaddr;Ljtux/UUtil$IntHolder;)I
 */
JNIEXPORT jint JNICALL Java_jtux_UNetwork_recvfrom
  (JNIEnv *, jclass, jint, jbyteArray, jint, jint, jobject, jobject);

/*
 * Class:     jtux_UNetwork
 * Method:    recvmsg
 * Signature: (ILjtux/UNetwork$s_msghdr;I)I
 */
JNIEXPORT jint JNICALL Java_jtux_UNetwork_recvmsg
  (JNIEnv *, jclass, jint, jobject, jint);

/*
 * Class:     jtux_UNetwork
 * Method:    send
 * Signature: (I[BII)I
 */
JNIEXPORT jint JNICALL Java_jtux_UNetwork_send
  (JNIEnv *, jclass, jint, jbyteArray, jint, jint);

/*
 * Class:     jtux_UNetwork
 * Method:    sendmsg
 * Signature: (ILjtux/UNetwork$s_msghdr;I)I
 */
JNIEXPORT jint JNICALL Java_jtux_UNetwork_sendmsg
  (JNIEnv *, jclass, jint, jobject, jint);

/*
 * Class:     jtux_UNetwork
 * Method:    sendto
 * Signature: (I[BIILjtux/UNetwork$s_sockaddr;I)I
 */
JNIEXPORT jint JNICALL Java_jtux_UNetwork_sendto
  (JNIEnv *, jclass, jint, jbyteArray, jint, jint, jobject, jint);

/*
 * Class:     jtux_UNetwork
 * Method:    setsockopt
 * Signature: (IIILjtux/UNetwork$SockOptValue;I)V
 */
JNIEXPORT void JNICALL Java_jtux_UNetwork_setsockopt
  (JNIEnv *, jclass, jint, jint, jint, jobject, jint);

/*
 * Class:     jtux_UNetwork
 * Method:    sockatmark
 * Signature: (I)I
 */
JNIEXPORT jint JNICALL Java_jtux_UNetwork_sockatmark
  (JNIEnv *, jclass, jint);

/*
 * Class:     jtux_UNetwork
 * Method:    socket
 * Signature: (III)I
 */
JNIEXPORT jint JNICALL Java_jtux_UNetwork_socket
  (JNIEnv *, jclass, jint, jint, jint);

#ifdef __cplusplus
}
#endif
#endif
