/* PlainDatagramSocketImpl.java -- VM interface for DatagramSocket impl Copyright (C) 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. */ package gnu.java.net; import gnu.classpath.Configuration; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocketImpl; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketAddress; import java.net.SocketException; /** * The VM interface for address@hidden gnu.java.net.PlainDatagramSocketImpl}. * * @author Ingo Proetel (address@hidden) */ public final class VMPlainDatagramSocketImpl { // Static initializer to load native library static { if (Configuration.INIT_LOAD_LIBRARY) { System.loadLibrary("javanet"); } } /** * Binds this socket to a particular port and interface * * @param port The port to bind to * @param addr The address to bind to * * @exception SocketException If an error occurs */ static void bind(PlainDatagramSocketImpl socket, int port, InetAddress addr) throws SocketException { nativeBind(socket,port,addr); } private static native void nativeBind(PlainDatagramSocketImpl socket, int port, InetAddress addr) throws SocketException; /** * Creates a new datagram socket * * @exception SocketException If an error occurs */ static void create(PlainDatagramSocketImpl socket) throws SocketException { nativeCreate(socket); } private static native void nativeCreate(PlainDatagramSocketImpl socket); /** * Connects to the remote address and port specified as arguments. * * @param addr The remote address to connect to * @param port The remote port to connect to * * @exception SocketException If an error occurs */ static void connect(PlainDatagramSocketImpl socket, InetAddress addr, int port) throws SocketException { nativeConnect(socket,addr,port); } private static native void nativeConnect(PlainDatagramSocketImpl socket, InetAddress addr, int port) throws SocketException; /** * Sends a packet of data to a remote host * * @param packet The packet to send * * @exception IOException If an error occurs */ static void send(PlainDatagramSocketImpl socket, DatagramPacket packet) throws IOException { nativeSendTo(socket, packet.getAddress(), packet.getPort(), packet.getData(), packet.getOffset(), packet.getLength()); } /** * Sends a packet of data to a remote host * * @param addr The address to send to * @param port The port to send to * @param buf The buffer to send * @param offset The offset of the data in the buffer to send * @param len The length of the data to send * * @exception IOException If an error occurs */ private static native void nativeSendTo(PlainDatagramSocketImpl socket, InetAddress addr, int port, byte[] buf, int offset, int len) throws IOException; /** * Receives a UDP packet from the network * * @param packet The packet to fill in with the data received * * @exception IOException IOException If an error occurs */ static void receive(PlainDatagramSocketImpl socket, DatagramPacket packet) throws IOException { nativeReceive(socket,packet); } private static native void nativeReceive(PlainDatagramSocketImpl socket, DatagramPacket packet) throws IOException; /** * Sets the value of an option on the socket * * @param option_id The identifier of the option to set * @param val The value of the option to set * * @exception SocketException If an error occurs */ static void setOption(PlainDatagramSocketImpl socket, int option_id, Object val) throws SocketException { nativeSetOption(socket, option_id, val); } private static native void nativeSetOption(PlainDatagramSocketImpl socket, int option_id, Object val); /** * Retrieves the value of an option on the socket * * @param option_id The identifier of the option to retrieve * * @return The value of the option * * @exception SocketException If an error occurs */ static Object getOption(PlainDatagramSocketImpl socket, int option_id) throws SocketException { return nativeGetOption(socket, option_id); } private static native Object nativeGetOption(PlainDatagramSocketImpl socket, int option_id) throws SocketException; /** * Closes the socket */ static void close(PlainDatagramSocketImpl socket) { nativeClose(socket); } private static native void nativeClose(PlainDatagramSocketImpl socket); /** * Joins a multicast group * * @param addr The group to join * * @exception IOException If an error occurs */ static void join(PlainDatagramSocketImpl socket, InetAddress addr) throws IOException { nativeJoin(socket,addr); } private static native void nativeJoin(PlainDatagramSocketImpl socket, InetAddress addr) throws IOException; /** * Leaves a multicast group * * @param addr The group to leave * * @exception IOException If an error occurs */ static void leave(PlainDatagramSocketImpl socket, InetAddress addr) throws IOException { nativeLeave(socket,addr); } private static native synchronized void nativeLeave (PlainDatagramSocketImpl socket, InetAddress addr) throws IOException; }