Initial revision
From-SVN: r102074
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
*.o
|
||||
*.a
|
||||
*.lo
|
||||
*.la
|
||||
.libs
|
||||
.deps
|
||||
Makefile
|
||||
Makefile.in
|
||||
@@ -0,0 +1,14 @@
|
||||
pkglib_LTLIBRARIES = libjavanet.la
|
||||
|
||||
libjavanet_la_SOURCES = javanet.c \
|
||||
javanet.h \
|
||||
java_net_VMInetAddress.c \
|
||||
java_net_VMNetworkInterface.c \
|
||||
gnu_java_net_PlainDatagramSocketImpl.c \
|
||||
gnu_java_net_PlainSocketImpl.c
|
||||
|
||||
libjavanet_la_LIBADD = $(top_builddir)/native/jni/classpath/jcl.lo
|
||||
|
||||
AM_LDFLAGS = @CLASSPATH_MODULE@
|
||||
AM_CPPFLAGS = @CLASSPATH_INCLUDES@
|
||||
AM_CFLAGS = @WARNING_CFLAGS@ @STRICT_WARNING_CFLAGS@ @ERROR_CFLAGS@
|
||||
@@ -0,0 +1,452 @@
|
||||
/* PlainDatagramSocketImpl.c - Native methods for PlainDatagramSocketImpl class
|
||||
Copyright (C) 1998 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
/* do not move; needed here because of some macro definitions */
|
||||
#include <config.h>
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
|
||||
#include <jni.h>
|
||||
#include <jcl.h>
|
||||
|
||||
#include "javanet.h"
|
||||
|
||||
#include "target_native.h"
|
||||
#ifndef WITHOUT_NETWORK
|
||||
#include "target_native_network.h"
|
||||
#endif /* WITHOUT_NETWORK */
|
||||
|
||||
#include "gnu_java_net_PlainDatagramSocketImpl.h"
|
||||
|
||||
/*
|
||||
* Note that most of the functions in this module simply redirect to another
|
||||
* internal function. Why? Because many of these functions are shared
|
||||
* with PlainSocketImpl.
|
||||
*/
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/*
|
||||
* Creates a new datagram socket
|
||||
*/
|
||||
JNIEXPORT void JNICALL
|
||||
Java_gnu_java_net_PlainDatagramSocketImpl_create (JNIEnv * env, jobject obj)
|
||||
{
|
||||
assert (env != NULL);
|
||||
assert ((*env) != NULL);
|
||||
|
||||
#ifndef WITHOUT_NETWORK
|
||||
_javanet_create (env, obj, 0);
|
||||
#else /* not WITHOUT_NETWORK */
|
||||
#endif /* not WITHOUT_NETWORK */
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/*
|
||||
* Close the socket.
|
||||
*/
|
||||
JNIEXPORT void JNICALL
|
||||
Java_gnu_java_net_PlainDatagramSocketImpl_close (JNIEnv * env, jobject obj)
|
||||
{
|
||||
assert (env != NULL);
|
||||
assert ((*env) != NULL);
|
||||
|
||||
#ifndef WITHOUT_NETWORK
|
||||
_javanet_close (env, obj, 0);
|
||||
#else /* not WITHOUT_NETWORK */
|
||||
#endif /* not WITHOUT_NETWORK */
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/*
|
||||
* This method binds the specified address to the specified local port.
|
||||
* Note that we have to set the local address and local port public instance
|
||||
* variables.
|
||||
*/
|
||||
JNIEXPORT void JNICALL
|
||||
Java_gnu_java_net_PlainDatagramSocketImpl_bind (JNIEnv * env, jobject obj,
|
||||
jint port, jobject addr)
|
||||
{
|
||||
assert (env != NULL);
|
||||
assert ((*env) != NULL);
|
||||
|
||||
#ifndef WITHOUT_NETWORK
|
||||
_javanet_bind (env, obj, addr, port, 0);
|
||||
#else /* not WITHOUT_NETWORK */
|
||||
#endif /* not WITHOUT_NETWORK */
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/*
|
||||
* This method sets the specified option for a socket
|
||||
*/
|
||||
JNIEXPORT void JNICALL
|
||||
Java_gnu_java_net_PlainDatagramSocketImpl_setOption (JNIEnv * env,
|
||||
jobject obj,
|
||||
jint option_id,
|
||||
jobject val)
|
||||
{
|
||||
assert (env != NULL);
|
||||
assert ((*env) != NULL);
|
||||
|
||||
#ifndef WITHOUT_NETWORK
|
||||
_javanet_set_option (env, obj, option_id, val);
|
||||
#else /* not WITHOUT_NETWORK */
|
||||
#endif /* not WITHOUT_NETWORK */
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/*
|
||||
* This method sets the specified option for a socket
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL
|
||||
Java_gnu_java_net_PlainDatagramSocketImpl_getOption (JNIEnv * env,
|
||||
jobject obj,
|
||||
jint option_id)
|
||||
{
|
||||
assert (env != NULL);
|
||||
assert ((*env) != NULL);
|
||||
|
||||
#ifndef WITHOUT_NETWORK
|
||||
return (_javanet_get_option (env, obj, option_id));
|
||||
#else /* not WITHOUT_NETWORK */
|
||||
return NULL;
|
||||
#endif /* not WITHOUT_NETWORK */
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/*
|
||||
* Reads a buffer from a remote host
|
||||
*/
|
||||
JNIEXPORT void JNICALL
|
||||
Java_gnu_java_net_PlainDatagramSocketImpl_receive0 (JNIEnv * env, jobject obj,
|
||||
jobject packet)
|
||||
{
|
||||
#ifndef WITHOUT_NETWORK
|
||||
int addr, port, bytes_read;
|
||||
unsigned int maxlen, offset;
|
||||
jclass cls, addr_cls;
|
||||
jfieldID fid;
|
||||
jmethodID mid;
|
||||
jarray arr;
|
||||
unsigned char octets[4];
|
||||
char ip_str[16];
|
||||
jobject ip_str_obj, addr_obj;
|
||||
|
||||
assert (env != NULL);
|
||||
assert ((*env) != NULL);
|
||||
|
||||
addr = 0;
|
||||
port = 0;
|
||||
maxlen = 0;
|
||||
offset = 0;
|
||||
bytes_read = 0;
|
||||
|
||||
if (packet == NULL)
|
||||
{
|
||||
JCL_ThrowException (env, "java/lang/NullPointerException",
|
||||
"Null datagram packet");
|
||||
return;
|
||||
}
|
||||
|
||||
/* Get the buffer from the packet */
|
||||
cls = (*env)->GetObjectClass (env, packet);
|
||||
if (cls == NULL)
|
||||
{
|
||||
JCL_ThrowException (env, IO_EXCEPTION, "Internal error");
|
||||
return;
|
||||
}
|
||||
|
||||
mid = (*env)->GetMethodID (env, cls, "getData", "()[B");
|
||||
if (mid == NULL)
|
||||
{
|
||||
JCL_ThrowException (env, IO_EXCEPTION, "Internal error: getData");
|
||||
return;
|
||||
}
|
||||
|
||||
arr = (*env)->CallObjectMethod (env, packet, mid);
|
||||
if ((*env)->ExceptionOccurred (env))
|
||||
return;
|
||||
if (arr == NULL)
|
||||
{
|
||||
JCL_ThrowException (env, IO_EXCEPTION, "Internal error: call getData");
|
||||
return;
|
||||
}
|
||||
|
||||
/* Now get the offset from the packet */
|
||||
mid = (*env)->GetMethodID (env, cls, "getOffset", "()I");
|
||||
if (mid == NULL)
|
||||
{
|
||||
JCL_ThrowException (env, IO_EXCEPTION, "Internal error: getOffset");
|
||||
return;
|
||||
}
|
||||
|
||||
offset = (*env)->CallIntMethod (env, packet, mid);
|
||||
if ((*env)->ExceptionOccurred (env))
|
||||
return;
|
||||
|
||||
DBG ("PlainDatagramSocketImpl.receive(): Got the offset\n");
|
||||
|
||||
/* Now get the maximal available length from the packet */
|
||||
fid = (*env)->GetFieldID (env, cls, "maxlen", "I");
|
||||
if (fid == NULL)
|
||||
{
|
||||
JCL_ThrowException (env, IO_EXCEPTION, "Internal error: maxlen");
|
||||
return;
|
||||
}
|
||||
|
||||
maxlen = (*env)->GetIntField (env, packet, fid);
|
||||
if ((*env)->ExceptionOccurred (env))
|
||||
return;
|
||||
|
||||
/* Receive the packet */
|
||||
/* should we try some sort of validation on the length? */
|
||||
bytes_read =
|
||||
_javanet_recvfrom (env, obj, arr, offset, maxlen, &addr, &port);
|
||||
if ((*env)->ExceptionOccurred (env))
|
||||
return;
|
||||
if (bytes_read == -1)
|
||||
{
|
||||
JCL_ThrowException (env, IO_EXCEPTION, "Internal error: receive");
|
||||
return;
|
||||
}
|
||||
|
||||
DBG ("PlainDatagramSocketImpl.receive(): Received packet\n");
|
||||
|
||||
/* Store the address */
|
||||
TARGET_NATIVE_NETWORK_INT_TO_IPADDRESS_BYTES (addr,
|
||||
octets[0],
|
||||
octets[1],
|
||||
octets[2], octets[3]);
|
||||
sprintf (ip_str, "%d.%d.%d.%d", octets[0], octets[1], octets[2], octets[3]);
|
||||
ip_str_obj = (*env)->NewStringUTF (env, ip_str);
|
||||
if (ip_str_obj == NULL)
|
||||
{
|
||||
JCL_ThrowException (env, IO_EXCEPTION, "Internal error: new string");
|
||||
return;
|
||||
}
|
||||
|
||||
addr_cls = (*env)->FindClass (env, "java/net/InetAddress");
|
||||
if (addr_cls == NULL)
|
||||
{
|
||||
JCL_ThrowException (env, IO_EXCEPTION,
|
||||
"Internal error: InetAddress class");
|
||||
return;
|
||||
}
|
||||
DBG ("PlainDatagramSocketImpl.receive(): Found InetAddress class\n");
|
||||
|
||||
mid = (*env)->GetStaticMethodID (env, addr_cls, "getByName",
|
||||
"(Ljava/lang/String;)Ljava/net/InetAddress;");
|
||||
if (mid == NULL)
|
||||
{
|
||||
JCL_ThrowException (env, IO_EXCEPTION, "Internal Error");
|
||||
return;
|
||||
}
|
||||
DBG
|
||||
("PlainDatagramSocketImpl.receive(): Found InetAddress.getByName method\n");
|
||||
|
||||
addr_obj = (*env)->CallStaticObjectMethod (env, addr_cls, mid, ip_str_obj);
|
||||
if ((*env)->ExceptionOccurred (env))
|
||||
return;
|
||||
|
||||
mid = (*env)->GetMethodID (env, cls, "setAddress",
|
||||
"(Ljava/net/InetAddress;)V");
|
||||
if (mid == NULL)
|
||||
{
|
||||
JCL_ThrowException (env, IO_EXCEPTION, "Internal error: setAddress");
|
||||
return;
|
||||
}
|
||||
|
||||
(*env)->CallVoidMethod (env, packet, mid, addr_obj);
|
||||
if ((*env)->ExceptionOccurred (env))
|
||||
return;
|
||||
|
||||
DBG ("PlainDatagramSocketImpl.receive(): Stored the address\n");
|
||||
|
||||
/* Store the port */
|
||||
mid = (*env)->GetMethodID (env, cls, "setPort", "(I)V");
|
||||
if (mid == NULL)
|
||||
{
|
||||
JCL_ThrowException (env, IO_EXCEPTION, "Internal error: setPort");
|
||||
return;
|
||||
}
|
||||
|
||||
(*env)->CallVoidMethod (env, packet, mid, port);
|
||||
if ((*env)->ExceptionOccurred (env))
|
||||
return;
|
||||
|
||||
DBG ("PlainDatagramSocketImpl.receive(): Stored the port\n");
|
||||
|
||||
/* Store back the length */
|
||||
fid = (*env)->GetFieldID (env, cls, "length", "I");
|
||||
if (fid == NULL)
|
||||
{
|
||||
JCL_ThrowException (env, IO_EXCEPTION, "Internal error: length");
|
||||
return;
|
||||
}
|
||||
|
||||
(*env)->SetIntField (env, packet, fid, bytes_read);
|
||||
if ((*env)->ExceptionOccurred (env))
|
||||
return;
|
||||
|
||||
DBG ("PlainDatagramSocketImpl.receive(): Stored the length\n");
|
||||
#else /* not WITHOUT_NETWORK */
|
||||
#endif /* not WITHOUT_NETWORK */
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/*
|
||||
* Writes a buffer to the remote host
|
||||
*/
|
||||
JNIEXPORT void JNICALL
|
||||
Java_gnu_java_net_PlainDatagramSocketImpl_sendto (JNIEnv * env, jobject obj,
|
||||
jobject addr, jint port,
|
||||
jarray buf, jint offset,
|
||||
jint len)
|
||||
{
|
||||
#ifndef WITHOUT_NETWORK
|
||||
jint netAddress;
|
||||
|
||||
assert (env != NULL);
|
||||
assert ((*env) != NULL);
|
||||
|
||||
netAddress = _javanet_get_netaddr (env, addr);
|
||||
if ((*env)->ExceptionOccurred (env))
|
||||
return;
|
||||
|
||||
DBG ("PlainDatagramSocketImpl.sendto(): have addr\n");
|
||||
|
||||
_javanet_sendto (env, obj, buf, offset, len, netAddress, port);
|
||||
if ((*env)->ExceptionOccurred (env))
|
||||
return;
|
||||
|
||||
DBG ("PlainDatagramSocketImpl.sendto(): finished\n");
|
||||
#else /* not WITHOUT_NETWORK */
|
||||
#endif /* not WITHOUT_NETWORK */
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/*
|
||||
* Joins a multicast group
|
||||
*/
|
||||
JNIEXPORT void JNICALL
|
||||
Java_gnu_java_net_PlainDatagramSocketImpl_join (JNIEnv * env, jobject obj,
|
||||
jobject addr)
|
||||
{
|
||||
#ifndef WITHOUT_NETWORK
|
||||
jint netAddress;
|
||||
int fd;
|
||||
int result;
|
||||
|
||||
assert (env != NULL);
|
||||
assert ((*env) != NULL);
|
||||
|
||||
netAddress = _javanet_get_netaddr (env, addr);
|
||||
if ((*env)->ExceptionOccurred (env))
|
||||
return;
|
||||
|
||||
fd = _javanet_get_int_field (env, obj, "native_fd");
|
||||
if ((*env)->ExceptionOccurred (env))
|
||||
return;
|
||||
|
||||
DBG ("PlainDatagramSocketImpl.join(): have native fd\n");
|
||||
|
||||
TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_ADD_MEMBERSHIP (fd, netAddress,
|
||||
result);
|
||||
|
||||
if (result != TARGET_NATIVE_OK)
|
||||
{
|
||||
JCL_ThrowException (env, IO_EXCEPTION,
|
||||
TARGET_NATIVE_LAST_ERROR_STRING ());
|
||||
return;
|
||||
}
|
||||
|
||||
DBG ("PlainDatagramSocketImpl.join(): finished\n");
|
||||
#else /* not WITHOUT_NETWORK */
|
||||
#endif /* not WITHOUT_NETWORK */
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/*
|
||||
* Leaves a multicast group
|
||||
*/
|
||||
JNIEXPORT void JNICALL
|
||||
Java_gnu_java_net_PlainDatagramSocketImpl_leave (JNIEnv * env, jobject obj,
|
||||
jobject addr)
|
||||
{
|
||||
#ifndef WITHOUT_NETWORK
|
||||
jint netAddress;
|
||||
int fd;
|
||||
int result;
|
||||
|
||||
assert (env != NULL);
|
||||
assert ((*env) != NULL);
|
||||
|
||||
netAddress = _javanet_get_netaddr (env, addr);
|
||||
if ((*env)->ExceptionOccurred (env))
|
||||
return;
|
||||
|
||||
fd = _javanet_get_int_field (env, obj, "native_fd");
|
||||
if ((*env)->ExceptionOccurred (env))
|
||||
return;
|
||||
|
||||
DBG ("PlainDatagramSocketImpl.leave(): have native fd\n");
|
||||
|
||||
TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_DROP_MEMBERSHIP (fd, netAddress,
|
||||
result);
|
||||
if (result != TARGET_NATIVE_OK)
|
||||
{
|
||||
JCL_ThrowException (env, IO_EXCEPTION,
|
||||
TARGET_NATIVE_LAST_ERROR_STRING ());
|
||||
return;
|
||||
}
|
||||
|
||||
DBG ("PlainDatagramSocketImpl.leave(): finished\n");
|
||||
#else /* not WITHOUT_NETWORK */
|
||||
#endif /* not WITHOUT_NETWORK */
|
||||
}
|
||||
@@ -0,0 +1,320 @@
|
||||
/* PlainSocketImpl.c - Native methods for PlainSocketImpl class
|
||||
Copyright (C) 1998, 2002, 2005 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
/* do not move; needed here because of some macro definitions */
|
||||
#include <config.h>
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
|
||||
#include <jni.h>
|
||||
#include <jcl.h>
|
||||
|
||||
#include "javanet.h"
|
||||
|
||||
#include "target_native.h"
|
||||
#ifndef WITHOUT_NETWORK
|
||||
#include "target_native_network.h"
|
||||
#endif /* WITHOUT_NETWORK */
|
||||
|
||||
#include "gnu_java_net_PlainSocketImpl.h"
|
||||
|
||||
/*
|
||||
* Note that the functions in this module simply redirect to another
|
||||
* internal function. Why? Because many of these functions are shared
|
||||
* with PlainDatagramSocketImpl. The unshared ones were done the same
|
||||
* way for consistency.
|
||||
*/
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/*
|
||||
* Creates a new stream or datagram socket
|
||||
*/
|
||||
JNIEXPORT void JNICALL
|
||||
Java_gnu_java_net_PlainSocketImpl_create (JNIEnv * env, jobject this,
|
||||
jboolean stream)
|
||||
{
|
||||
#ifndef WITHOUT_NETWORK
|
||||
assert (env != NULL);
|
||||
assert ((*env) != NULL);
|
||||
|
||||
_javanet_create (env, this, stream);
|
||||
#else /* not WITHOUT_NETWORK */
|
||||
#endif /* not WITHOUT_NETWORK */
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/*
|
||||
* Close the socket. Any underlying streams will be closed by this
|
||||
* action as well.
|
||||
*/
|
||||
JNIEXPORT void JNICALL
|
||||
Java_gnu_java_net_PlainSocketImpl_close (JNIEnv * env, jobject this)
|
||||
{
|
||||
#ifndef WITHOUT_NETWORK
|
||||
assert (env != NULL);
|
||||
assert ((*env) != NULL);
|
||||
|
||||
_javanet_close (env, this, 1);
|
||||
#else /* not WITHOUT_NETWORK */
|
||||
#endif /* not WITHOUT_NETWORK */
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/*
|
||||
* Connects to the specified destination.
|
||||
*/
|
||||
JNIEXPORT void JNICALL
|
||||
Java_gnu_java_net_PlainSocketImpl_connect (JNIEnv * env, jobject this,
|
||||
jobject addr, jint port)
|
||||
{
|
||||
#ifndef WITHOUT_NETWORK
|
||||
assert (env != NULL);
|
||||
assert ((*env) != NULL);
|
||||
|
||||
_javanet_connect (env, this, addr, port);
|
||||
#else /* not WITHOUT_NETWORK */
|
||||
#endif /* not WITHOUT_NETWORK */
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/*
|
||||
* This method binds the specified address to the specified local port.
|
||||
* Note that we have to set the local address and local port public instance
|
||||
* variables.
|
||||
*/
|
||||
JNIEXPORT void JNICALL
|
||||
Java_gnu_java_net_PlainSocketImpl_bind (JNIEnv * env, jobject this,
|
||||
jobject addr, jint port)
|
||||
{
|
||||
#ifndef WITHOUT_NETWORK
|
||||
assert (env != NULL);
|
||||
assert ((*env) != NULL);
|
||||
|
||||
_javanet_bind (env, this, addr, port, 1);
|
||||
#else /* not WITHOUT_NETWORK */
|
||||
#endif /* not WITHOUT_NETWORK */
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/*
|
||||
* Starts listening on a socket with the specified number of pending
|
||||
* connections allowed.
|
||||
*/
|
||||
JNIEXPORT void JNICALL
|
||||
Java_gnu_java_net_PlainSocketImpl_listen (JNIEnv * env, jobject this,
|
||||
jint queuelen)
|
||||
{
|
||||
#ifndef WITHOUT_NETWORK
|
||||
assert (env != NULL);
|
||||
assert ((*env) != NULL);
|
||||
|
||||
_javanet_listen (env, this, queuelen);
|
||||
#else /* not WITHOUT_NETWORK */
|
||||
#endif /* not WITHOUT_NETWORK */
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/*
|
||||
* Accepts a new connection and assigns it to the passed in SocketImpl
|
||||
* object. Note that we assume this is a PlainSocketImpl just like us.
|
||||
*/
|
||||
JNIEXPORT void JNICALL
|
||||
Java_gnu_java_net_PlainSocketImpl_accept (JNIEnv * env, jobject this,
|
||||
jobject impl)
|
||||
{
|
||||
#ifndef WITHOUT_NETWORK
|
||||
assert (env != NULL);
|
||||
assert ((*env) != NULL);
|
||||
|
||||
_javanet_accept (env, this, impl);
|
||||
#else /* not WITHOUT_NETWORK */
|
||||
#endif /* not WITHOUT_NETWORK */
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
JNIEXPORT jint JNICALL
|
||||
Java_gnu_java_net_PlainSocketImpl_available (JNIEnv * env, jobject this)
|
||||
{
|
||||
#ifndef WITHOUT_NETWORK
|
||||
jclass cls;
|
||||
jfieldID fid;
|
||||
int fd;
|
||||
int bytesAvailable;
|
||||
int result;
|
||||
|
||||
assert (env != NULL);
|
||||
assert ((*env) != NULL);
|
||||
|
||||
cls = (*env)->GetObjectClass (env, this);
|
||||
if (cls == 0)
|
||||
{
|
||||
JCL_ThrowException (env, IO_EXCEPTION, "internal error");
|
||||
return 0;
|
||||
}
|
||||
|
||||
fid = (*env)->GetFieldID (env, cls, "native_fd", "I");
|
||||
if (fid == 0)
|
||||
{
|
||||
JCL_ThrowException (env, IO_EXCEPTION, "internal error");
|
||||
return 0;
|
||||
}
|
||||
|
||||
fd = (*env)->GetIntField (env, this, fid);
|
||||
|
||||
TARGET_NATIVE_NETWORK_SOCKET_RECEIVE_AVAILABLE (fd, bytesAvailable, result);
|
||||
if (result != TARGET_NATIVE_OK)
|
||||
{
|
||||
JCL_ThrowException (env, IO_EXCEPTION,
|
||||
TARGET_NATIVE_LAST_ERROR_STRING ());
|
||||
return 0;
|
||||
}
|
||||
|
||||
return bytesAvailable;
|
||||
#else /* not WITHOUT_NETWORK */
|
||||
return 0;
|
||||
#endif /* not WITHOUT_NETWORK */
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/*
|
||||
* This method sets the specified option for a socket
|
||||
*/
|
||||
JNIEXPORT void JNICALL
|
||||
Java_gnu_java_net_PlainSocketImpl_setOption (JNIEnv * env, jobject this,
|
||||
jint option_id, jobject val)
|
||||
{
|
||||
#ifndef WITHOUT_NETWORK
|
||||
assert (env != NULL);
|
||||
assert ((*env) != NULL);
|
||||
|
||||
_javanet_set_option (env, this, option_id, val);
|
||||
#else /* not WITHOUT_NETWORK */
|
||||
#endif /* not WITHOUT_NETWORK */
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/*
|
||||
* This method sets the specified option for a socket
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL
|
||||
Java_gnu_java_net_PlainSocketImpl_getOption (JNIEnv * env, jobject this,
|
||||
jint option_id)
|
||||
{
|
||||
#ifndef WITHOUT_NETWORK
|
||||
assert (env != NULL);
|
||||
assert ((*env) != NULL);
|
||||
|
||||
return (_javanet_get_option (env, this, option_id));
|
||||
#else /* not WITHOUT_NETWORK */
|
||||
return NULL;
|
||||
#endif /* not WITHOUT_NETWORK */
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/*
|
||||
* Reads a buffer from a remote host
|
||||
*/
|
||||
JNIEXPORT jint JNICALL
|
||||
Java_gnu_java_net_PlainSocketImpl_read (JNIEnv * env, jobject this,
|
||||
jarray buf, jint offset, jint len)
|
||||
{
|
||||
#ifndef WITHOUT_NETWORK
|
||||
assert (env != NULL);
|
||||
assert ((*env) != NULL);
|
||||
|
||||
return (_javanet_recvfrom (env, this, buf, offset, len, 0, 0));
|
||||
#else /* not WITHOUT_NETWORK */
|
||||
return 0;
|
||||
#endif /* not WITHOUT_NETWORK */
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/*
|
||||
* Writes a buffer to the remote host
|
||||
*/
|
||||
JNIEXPORT void JNICALL
|
||||
Java_gnu_java_net_PlainSocketImpl_write (JNIEnv * env, jobject this,
|
||||
jarray buf, jint offset, jint len)
|
||||
{
|
||||
#ifndef WITHOUT_NETWORK
|
||||
assert (env != NULL);
|
||||
assert ((*env) != NULL);
|
||||
|
||||
_javanet_sendto (env, this, buf, offset, len, 0, 0);
|
||||
#else /* not WITHOUT_NETWORK */
|
||||
#endif /* not WITHOUT_NETWORK */
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_gnu_java_net_PlainSocketImpl_shutdownInput (JNIEnv * env, jobject this)
|
||||
{
|
||||
#ifndef WITHOUT_NETWORK
|
||||
assert (env != NULL);
|
||||
assert ((*env) != NULL);
|
||||
|
||||
_javanet_shutdownInput (env, this);
|
||||
#else /* not WITHOUT_NETWORK */
|
||||
#endif /* not WITHOUT_NETWORK */
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_gnu_java_net_PlainSocketImpl_shutdownOutput (JNIEnv * env, jobject this)
|
||||
{
|
||||
#ifndef WITHOUT_NETWORK
|
||||
assert (env != NULL);
|
||||
assert ((*env) != NULL);
|
||||
|
||||
_javanet_shutdownOutput (env, this);
|
||||
#else /* not WITHOUT_NETWORK */
|
||||
#endif /* not WITHOUT_NETWORK */
|
||||
}
|
||||
|
||||
/* end of file */
|
||||
@@ -0,0 +1,282 @@
|
||||
/* VMInetAddress.c - Native methods for InetAddress class
|
||||
Copyright (C) 1998, 2002, 2005 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
/* do not move; needed here because of some macro definitions */
|
||||
#include <config.h>
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
|
||||
#include <jni.h>
|
||||
#include <jcl.h>
|
||||
|
||||
#include "javanet.h"
|
||||
|
||||
#include "target_native.h"
|
||||
#ifndef WITHOUT_NETWORK
|
||||
#include "target_native_network.h"
|
||||
#endif /* WITHOUT_NETWORK */
|
||||
|
||||
#include "java_net_VMInetAddress.h"
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/*
|
||||
* Function to return the local hostname
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL
|
||||
Java_java_net_VMInetAddress_getLocalHostname (JNIEnv * env,
|
||||
jclass class
|
||||
__attribute__ ((__unused__)))
|
||||
{
|
||||
char hostname[256];
|
||||
int result;
|
||||
jstring retval;
|
||||
|
||||
assert (env != NULL);
|
||||
assert ((*env) != NULL);
|
||||
|
||||
#ifndef WITHOUT_NETWORK
|
||||
TARGET_NATIVE_NETWORK_GET_HOSTNAME (hostname, sizeof (hostname), result);
|
||||
if (result != TARGET_NATIVE_OK)
|
||||
{
|
||||
strcpy (hostname, "localhost");
|
||||
}
|
||||
#else /* not WITHOUT_NETWORK */
|
||||
strcpy (hostname, "localhost");
|
||||
#endif /* not WITHOUT_NETWORK */
|
||||
|
||||
retval = (*env)->NewStringUTF (env, hostname);
|
||||
|
||||
return (retval);
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/*
|
||||
* Returns the value of the special IP address INADDR_ANY
|
||||
*/
|
||||
JNIEXPORT jarray JNICALL
|
||||
Java_java_net_VMInetAddress_lookupInaddrAny (JNIEnv * env,
|
||||
jclass class
|
||||
__attribute__ ((__unused__)))
|
||||
{
|
||||
jarray IParray;
|
||||
jbyte *octets;
|
||||
|
||||
assert (env != NULL);
|
||||
assert ((*env) != NULL);
|
||||
|
||||
/* Allocate an array for the IP address */
|
||||
IParray = (*env)->NewByteArray (env, 4);
|
||||
if (IParray == NULL)
|
||||
{
|
||||
JCL_ThrowException (env, UNKNOWN_HOST_EXCEPTION, "Internal Error");
|
||||
return (jarray) NULL;
|
||||
}
|
||||
|
||||
/* Copy in the values */
|
||||
octets = (*env)->GetByteArrayElements (env, IParray, 0);
|
||||
|
||||
#ifndef WITHOUT_NETWORK
|
||||
TARGET_NATIVE_NETWORK_INT_TO_IPADDRESS_BYTES (INADDR_ANY,
|
||||
octets[0],
|
||||
octets[1],
|
||||
octets[2], octets[3]);
|
||||
(*env)->ReleaseByteArrayElements (env, IParray, octets, 0);
|
||||
#else /* not WITHOUT_NETWORK */
|
||||
octets[0] = 0;
|
||||
octets[1] = 0;
|
||||
octets[2] = 0;
|
||||
octets[3] = 0;
|
||||
#endif /* not WITHOUT_NETWORK */
|
||||
|
||||
return (IParray);
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/*
|
||||
* Function to return the canonical hostname for a given IP address passed
|
||||
* in as a byte array
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL
|
||||
Java_java_net_VMInetAddress_getHostByAddr (JNIEnv * env,
|
||||
jclass class
|
||||
__attribute__ ((__unused__)),
|
||||
jarray arr)
|
||||
{
|
||||
#ifndef WITHOUT_NETWORK
|
||||
jbyte *octets;
|
||||
jsize len;
|
||||
int addr;
|
||||
char hostname[255];
|
||||
int result;
|
||||
jstring retval;
|
||||
|
||||
assert (env != NULL);
|
||||
assert ((*env) != NULL);
|
||||
|
||||
/* Grab the byte[] array with the IP out of the input data */
|
||||
len = (*env)->GetArrayLength (env, arr);
|
||||
if (len != 4)
|
||||
{
|
||||
JCL_ThrowException (env, UNKNOWN_HOST_EXCEPTION, "Bad IP Address");
|
||||
return (jstring) NULL;
|
||||
}
|
||||
|
||||
octets = (*env)->GetByteArrayElements (env, arr, 0);
|
||||
if (!octets)
|
||||
{
|
||||
JCL_ThrowException (env, UNKNOWN_HOST_EXCEPTION, "Bad IP Address");
|
||||
return (jstring) NULL;
|
||||
}
|
||||
|
||||
/* Convert it to a 32 bit address */
|
||||
TARGET_NATIVE_NETWORK_IPADDRESS_BYTES_TO_INT (octets[0],
|
||||
octets[1],
|
||||
octets[2], octets[3], addr);
|
||||
|
||||
/* Release some memory */
|
||||
(*env)->ReleaseByteArrayElements (env, arr, octets, 0);
|
||||
|
||||
/* Resolve the address and return the name */
|
||||
TARGET_NATIVE_NETWORK_GET_HOSTNAME_BY_ADDRESS (addr, hostname,
|
||||
sizeof (hostname), result);
|
||||
if (result != TARGET_NATIVE_OK)
|
||||
{
|
||||
JCL_ThrowException (env, UNKNOWN_HOST_EXCEPTION, "Bad IP address");
|
||||
return (jstring) NULL;
|
||||
}
|
||||
|
||||
retval = (*env)->NewStringUTF (env, hostname);
|
||||
|
||||
return (retval);
|
||||
#else /* not WITHOUT_NETWORK */
|
||||
return (jstring) NULL;
|
||||
#endif /* not WITHOUT_NETWORK */
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
JNIEXPORT jobjectArray JNICALL
|
||||
Java_java_net_VMInetAddress_getHostByName (JNIEnv * env,
|
||||
jclass class
|
||||
__attribute__ ((__unused__)),
|
||||
jstring host)
|
||||
{
|
||||
#ifndef WITHOUT_NETWORK
|
||||
const char *hostname;
|
||||
/* FIXME: limitation of max. 64 addresses - how to make it more flexibale? */
|
||||
int addresses[64];
|
||||
jsize addresses_count;
|
||||
int result;
|
||||
jclass arr_class;
|
||||
jobjectArray addrs;
|
||||
int i;
|
||||
jbyte *octets;
|
||||
jarray ret_octets;
|
||||
int max_addresses;
|
||||
|
||||
assert (env != NULL);
|
||||
assert ((*env) != NULL);
|
||||
|
||||
/* Grab the hostname string */
|
||||
hostname = (*env)->GetStringUTFChars (env, host, 0);
|
||||
if (!hostname)
|
||||
{
|
||||
JCL_ThrowException (env, UNKNOWN_HOST_EXCEPTION, "Null hostname");
|
||||
return (jobjectArray) NULL;
|
||||
}
|
||||
|
||||
max_addresses = sizeof (addresses) / sizeof (addresses[0]);
|
||||
TARGET_NATIVE_NETWORK_GET_HOSTNAME_BY_NAME (hostname,
|
||||
addresses,
|
||||
max_addresses,
|
||||
addresses_count, result);
|
||||
if (result != TARGET_NATIVE_OK)
|
||||
{
|
||||
JCL_ThrowException (env, UNKNOWN_HOST_EXCEPTION, (char *) hostname);
|
||||
return (jobjectArray) NULL;
|
||||
}
|
||||
(*env)->ReleaseStringUTFChars (env, host, hostname);
|
||||
|
||||
arr_class = (*env)->FindClass (env, "[B");
|
||||
if (!arr_class)
|
||||
{
|
||||
JCL_ThrowException (env, UNKNOWN_HOST_EXCEPTION, "Internal Error");
|
||||
return (jobjectArray) NULL;
|
||||
}
|
||||
|
||||
addrs = (*env)->NewObjectArray (env, addresses_count, arr_class, 0);
|
||||
if (!addrs)
|
||||
{
|
||||
JCL_ThrowException (env, UNKNOWN_HOST_EXCEPTION, "Internal Error");
|
||||
return (jobjectArray) NULL;
|
||||
}
|
||||
|
||||
/* Now loop and copy in each address */
|
||||
for (i = 0; i < addresses_count; i++)
|
||||
{
|
||||
ret_octets = (*env)->NewByteArray (env, 4);
|
||||
if (!ret_octets)
|
||||
{
|
||||
JCL_ThrowException (env, UNKNOWN_HOST_EXCEPTION, "Internal Error");
|
||||
return (jobjectArray) NULL;
|
||||
}
|
||||
|
||||
octets = (*env)->GetByteArrayElements (env, ret_octets, 0);
|
||||
|
||||
TARGET_NATIVE_NETWORK_INT_TO_IPADDRESS_BYTES (addresses[i],
|
||||
octets[0],
|
||||
octets[1],
|
||||
octets[2], octets[3]);
|
||||
|
||||
(*env)->ReleaseByteArrayElements (env, ret_octets, octets, 0);
|
||||
|
||||
(*env)->SetObjectArrayElement (env, addrs, i, ret_octets);
|
||||
}
|
||||
|
||||
return (addrs);
|
||||
#else /* not WITHOUT_NETWORK */
|
||||
return (jobjectArray) NULL;
|
||||
#endif /* not WITHOUT_NETWORK */
|
||||
}
|
||||
|
||||
/* end of file */
|
||||
@@ -0,0 +1,66 @@
|
||||
/* VMNetworkInterface.c - Native methods for NetworkInterface class
|
||||
Copyright (C) 2003, 2005 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
/* do not move; needed here because of some macro definitions */
|
||||
#include <config.h>
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
|
||||
#include <jni.h>
|
||||
#include <jcl.h>
|
||||
|
||||
#include "java_net_VMNetworkInterface.h"
|
||||
|
||||
#include "javanet.h"
|
||||
|
||||
/*
|
||||
* Returns all local network interfaces as vector
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL
|
||||
Java_java_net_VMNetworkInterface_getInterfaces (JNIEnv * env,
|
||||
jclass class
|
||||
__attribute__ ((__unused__)))
|
||||
{
|
||||
JCL_ThrowException (env, IO_EXCEPTION,
|
||||
"java.net.VMNetworkInterface.getInterfaces(): not implemented");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* end of file */
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,109 @@
|
||||
/* javanet.h - Declarations for common functions for the java.net package
|
||||
Copyright (C) 1998, 2005 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
|
||||
#ifndef _JAVANET_LOADED
|
||||
#define _JAVANET_LOADED
|
||||
|
||||
#include <jni.h>
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/*
|
||||
* Defined constants
|
||||
*/
|
||||
|
||||
/* Exception Classes */
|
||||
#define BIND_EXCEPTION "java/net/BindException"
|
||||
#define IO_EXCEPTION "java/io/IOException"
|
||||
#define SOCKET_EXCEPTION "java/net/SocketException"
|
||||
#define UNKNOWN_HOST_EXCEPTION "java/net/UnknownHostException"
|
||||
|
||||
/* Socket Option Identifiers - Don't change or binary compatibility with
|
||||
the JDK will be broken! These also need to
|
||||
be kept compatible with java.net.SocketOptions */
|
||||
#define SOCKOPT_TCP_NODELAY 1
|
||||
#define SOCKOPT_SO_BINDADDR 15
|
||||
#define SOCKOPT_SO_LINGER 128
|
||||
#define SOCKOPT_SO_TIMEOUT 4102
|
||||
#define SOCKOPT_SO_SNDBUF 4097
|
||||
#define SOCKOPT_SO_RCVBUF 4098
|
||||
#define SOCKOPT_SO_REUSEADDR 4
|
||||
#define SOCKOPT_IP_MULTICAST_IF 16
|
||||
#define SOCKOPT_SO_KEEPALIVE 8
|
||||
|
||||
/* Internal option identifiers. Not needed for JDK compatibility */
|
||||
#define SOCKOPT_IP_TTL 7777
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/*
|
||||
* Macros
|
||||
*/
|
||||
|
||||
/* Simple debug macro */
|
||||
#ifdef DEBUG
|
||||
#define DBG(x) fprintf(stderr, (x));
|
||||
#else
|
||||
#define DBG(x)
|
||||
#endif
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
/*
|
||||
* Function Prototypes
|
||||
*/
|
||||
|
||||
extern int _javanet_get_int_field(JNIEnv *, jobject, const char *);
|
||||
extern int _javanet_get_netaddr(JNIEnv *, jobject);
|
||||
extern void _javanet_create(JNIEnv *, jobject, jboolean);
|
||||
extern void _javanet_close(JNIEnv *, jobject, int);
|
||||
extern void _javanet_connect(JNIEnv *, jobject, jobject, jint);
|
||||
extern void _javanet_bind(JNIEnv *, jobject, jobject, jint, int);
|
||||
extern void _javanet_listen(JNIEnv *, jobject, jint);
|
||||
extern void _javanet_accept(JNIEnv *, jobject, jobject);
|
||||
extern int _javanet_recvfrom(JNIEnv *, jobject, jarray, int, int, int *, int *);
|
||||
extern void _javanet_sendto(JNIEnv *, jobject, jarray, int, int, int, int);
|
||||
extern jobject _javanet_get_option(JNIEnv *, jobject, jint);
|
||||
extern void _javanet_set_option(JNIEnv *, jobject, jint, jobject);
|
||||
extern void _javanet_shutdownInput (JNIEnv *, jobject);
|
||||
extern void _javanet_shutdownOutput (JNIEnv *, jobject);
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
#endif /* not _JAVANET_H_LOADED */
|
||||
|
||||
Reference in New Issue
Block a user