diff options
Diffstat (limited to 'src/bindings/java/ZeroTierServerSocket.java')
| -rw-r--r-- | src/bindings/java/ZeroTierServerSocket.java | 214 |
1 files changed, 214 insertions, 0 deletions
diff --git a/src/bindings/java/ZeroTierServerSocket.java b/src/bindings/java/ZeroTierServerSocket.java new file mode 100644 index 0000000..5d96acf --- /dev/null +++ b/src/bindings/java/ZeroTierServerSocket.java @@ -0,0 +1,214 @@ +/* + * Copyright (c)2013-2021 ZeroTier, Inc. + * + * Use of this software is governed by the Business Source License included + * in the LICENSE.TXT file in the project's root directory. + * + * Change Date: 2026-01-01 + * + * On the date above, in accordance with the Business Source License, use + * of this software will be governed by version 2.0 of the Apache License. + */ +/****/ + +package com.zerotier.sockets; + +import com.zerotier.sockets.*; +import java.io.*; +import java.net.*; + +public class ZeroTierServerSocket { + private ZeroTierSocket _socket; + + /** + * Create an unbound ZeroTierServerSocket + */ + public ZeroTierServerSocket() throws IOException + { + _socket = new ZeroTierSocket(ZeroTierNative.ZTS_AF_INET6, ZeroTierNative.ZTS_SOCK_STREAM, 0); + } + + /** + * Create a ZeroTierServerSocket bound to the given port + */ + public ZeroTierServerSocket(int localPort) throws IOException + { + _socket = new ZeroTierSocket(ZeroTierNative.ZTS_AF_INET, ZeroTierNative.ZTS_SOCK_STREAM, 0); + _socket.bind("0.0.0.0", localPort); + _socket.listen(0); + } + + /** + * Create a ZeroTierServerSocket bound to the given port with a backlog + */ + public ZeroTierServerSocket(int localPort, int backlog) throws IOException + { + _socket = new ZeroTierSocket(ZeroTierNative.ZTS_AF_INET6, ZeroTierNative.ZTS_SOCK_STREAM, 0); + _socket.bind("::", localPort); + _socket.listen(backlog); + } + + /** + * Create a ZeroTierServerSocket bound to the given port and local address + */ + public ZeroTierServerSocket(int localPort, int backlog, InetAddress localAddr) throws IOException + { + _socket = new ZeroTierSocket(ZeroTierNative.ZTS_AF_INET6, ZeroTierNative.ZTS_SOCK_STREAM, 0); + _socket.bind(localAddr.getHostAddress(), localPort); + _socket.listen(backlog); + } + + /** + * Accept incoming connections on this ZeroTierSocket + * @return New ZeroTierSocket representing the accepted connection + * @exception IOException when an I/O error occurs + */ + public ZeroTierSocket accept() throws IOException + { + return _socket.accept(); + } + + /** + * Bind to a local address + * @param localAddr Local address to which this socket should bind + * @param localPort Local port to which this socket should bind + * + * @exception IOException when an I/O error occurs + */ + public void bind(SocketAddress localAddr) throws IOException + { + InetSocketAddress inetAddr = (InetSocketAddress)localAddr; + _socket.bind(inetAddr.getHostName(), inetAddr.getPort()); + } + + /** + * Bind to a local address + * @param localAddr Local address to which this socket should bind + * @param localPort Local port to which this socket should bind + * + * @exception IOException when an I/O error occurs + */ + public void bind(SocketAddress localAddr, int backlog) throws IOException + { + InetSocketAddress inetAddr = (InetSocketAddress)localAddr; + _socket.bind(inetAddr.getHostName(), inetAddr.getPort()); + } + + /** + * Close the ZeroTierSocket. + * + * @exception IOException when an I/O error occurs + */ + public void close() throws IOException + { + _socket.close(); + } + + /** + * Get the remote address to which this ZeroTierSocket is bound + * @return Remote address + */ + public InetAddress getInetAddress() + { + return _socket.getLocalAddress(); + } + + /** + * Get the local port to which this ZeroTierSocket is bound + * @return Local port + */ + public int getLocalPort() + { + return _socket.getLocalPort(); + } + + /** + * Get the local address to which this ZeroTierSocket is bound + * @return Local address + */ + public SocketAddress getLocalSocketAddress() + { + return _socket.getLocalSocketAddress(); + } + + /** + * Return the size of the receive buffer for the ZeroTierSocket's ZeroTierInputStream (SO_RCVBUF) + * @return Size of the receive buffer + * @exception SocketException when an error occurs in the native socket layer + */ + public int getReceiveBufferSize() throws IOException + { + return _socket.getReceiveBufferSize(); + } + + /** + * Return whether address reuse is enabled on this ZeroTierSocket (SO_REUSEADDR) + * @return true or false + * @exception SocketException when an error occurs in the native socket layer + */ + public boolean getReuseAddress() throws IOException + { + return _socket.getReuseAddress(); + } + + /** + * Get the ZeroTierSocket's timeout value (SO_RCVTIMEO) + * @return Nothing. + * @exception SocketException when an error occurs in the native socket layer + */ + public int getSoTimeout() throws IOException + { + return _socket.getSoTimeout(); + } + + /** + * Return whether this ZeroTierSocket is bound to a local address + * @return true or false + */ + public boolean isBound() + { + return _socket.isBound(); + } + + /** + * Return whether this ZeroTierSocket has been closed + * @return true or false + */ + public boolean isClosed() + { + return _socket.isClosed(); + } + + /** + * Set the size of the receive buffer for the ZeroTierSocket's ZeroTierInputStream. + * @param bufferSize Size of receive buffer + * + * @exception SocketException when an error occurs in the native socket layer + */ + public void setReceiveBufferSize(int bufferSize) throws IOException + { + _socket.setReceiveBufferSize(bufferSize); + } + + /** + * Enable or disable the re-use of addresses (SO_REUSEADDR) + * @param enabled Whether SO_REUSEADDR is enabled + * + * @exception SocketException when an error occurs in the native socket layer + */ + public void setReuseAddress(boolean enabled) throws IOException + { + _socket.setReuseAddress(enabled); + } + + /** + * Set the timeout value for SO_RCVTIMEO + * @param timeout Socket receive timeout value. + * + * @exception SocketException when an error occurs in the native socket layer + */ + public void setSoTimeout(int timeout) throws IOException + { + _socket.setSoTimeout(timeout); + } +} |
