From: Michael Koch Date: Wed, 25 Sep 2002 17:14:09 +0000 (+0000) Subject: 2002-09-25 Michael Koch X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=fc44b85de78353cb3930e3d59346863bf344ef93;p=gcc.git 2002-09-25 Michael Koch * java/net/DatagramSocket.java (DatagramSocket): Initialize new instance variables. (close): Reset new instance variables. (getLocalAddress): Remove unneeded SecurityManager usage. (getLocalPort): Check if socket is already bound. (isConnected): New method. (getInetAddress): Implemented. (getPort): Better Implementation, documentation fixed. (getRemoteSocketAddress): New method. * java/net/JarURLConnection.java (element): Typo fixed. (getMainAttributes): New method. (getAttributes): New method (stub only). (getManifest): New method (stub only). * java/net/NetPermission.java: Added serialVersionsUID. * java/net/Socket.java (connect): Check blocking mode of associated channel, documentation added. (getLocalSocketAddress): Better implementation. (getRemoteSocketAddress): Implemented. (isBound): New method. (setSendBufferSize): Documentation added. * java/net/SocketAddress.java: Added serialVersionsUID. * java/net/SocketPermission.java: Added serialVersionsUID. * java/net/URL.java (URL): Wrap for shorter lines, initialize new instance variables, documentation added. (equals): Check new instance variables too. (getContent): Documentation added. (getPath): Documentation added. (getAuthority): New method. (getHost): Documentation added. (getPort): Documentation added. (getDefaultPort): New method. (getProtocol): Documentation added. (getUserInfo): Documentation added. (set): Initialize new instance variables, documentation added. * java/net/URLStreamHandler.java (setURL): New method. * java/net/natPlainDatagramSocketImpl.cc (connect): Fix exception name. (disconnect): Fix exception name. From-SVN: r57501 --- diff --git a/libjava/ChangeLog b/libjava/ChangeLog index c6507521501..3132150f7ee 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,48 @@ +2002-09-25 Michael Koch + + * java/net/DatagramSocket.java + (DatagramSocket): Initialize new instance variables. + (close): Reset new instance variables. + (getLocalAddress): Remove unneeded SecurityManager usage. + (getLocalPort): Check if socket is already bound. + (isConnected): New method. + (getInetAddress): Implemented. + (getPort): Better Implementation, documentation fixed. + (getRemoteSocketAddress): New method. + * java/net/JarURLConnection.java + (element): Typo fixed. + (getMainAttributes): New method. + (getAttributes): New method (stub only). + (getManifest): New method (stub only). + * java/net/NetPermission.java: Added serialVersionsUID. + * java/net/Socket.java + (connect): Check blocking mode of associated channel, + documentation added. + (getLocalSocketAddress): Better implementation. + (getRemoteSocketAddress): Implemented. + (isBound): New method. + (setSendBufferSize): Documentation added. + * java/net/SocketAddress.java: Added serialVersionsUID. + * java/net/SocketPermission.java: Added serialVersionsUID. + * java/net/URL.java + (URL): Wrap for shorter lines, initialize new instance variables, + documentation added. + (equals): Check new instance variables too. + (getContent): Documentation added. + (getPath): Documentation added. + (getAuthority): New method. + (getHost): Documentation added. + (getPort): Documentation added. + (getDefaultPort): New method. + (getProtocol): Documentation added. + (getUserInfo): Documentation added. + (set): Initialize new instance variables, documentation added. + * java/net/URLStreamHandler.java + (setURL): New method. + * java/net/natPlainDatagramSocketImpl.cc + (connect): Fix exception name. + (disconnect): Fix exception name. + 2002-09-25 Michael Koch * java/nio/channels/spi/AbstractSelectableChannel.java: New file. diff --git a/libjava/java/net/DatagramSocket.java b/libjava/java/net/DatagramSocket.java index eef638db091..dfbce3bcf7d 100644 --- a/libjava/java/net/DatagramSocket.java +++ b/libjava/java/net/DatagramSocket.java @@ -37,6 +37,9 @@ public class DatagramSocket DatagramChannel ch; + private InetAddress remoteAddress; + private int remotePort; + /** * Creates a DatagramSocket * @@ -59,6 +62,8 @@ public class DatagramSocket protected DatagramSocket (DatagramSocketImpl impl) { this.impl = impl; + this.remoteAddress = null; + this.remotePort = -1; } /** @@ -134,6 +139,9 @@ public class DatagramSocket impl.setOption(SocketOptions.SO_REUSEADDR, new Boolean(true)); impl.bind(port, laddr == null ? InetAddress.ANY_IF : laddr); + + remoteAddress = null; + remotePort = -1; } /** @@ -169,6 +177,8 @@ public class DatagramSocket public void close() { impl.close(); + remoteAddress = null; + remotePort = -1; } /** @@ -198,7 +208,6 @@ public class DatagramSocket */ public InetAddress getLocalAddress() { - SecurityManager s = System.getSecurityManager(); // FIXME: JCL p. 510 says this should call checkConnect. But what // string should be used as the hostname? Maybe this is just a side // effect of calling InetAddress.getLocalHost. @@ -241,6 +250,9 @@ public class DatagramSocket */ public int getLocalPort() { + if (!isBound ()) + return -1; + return impl.getLocalPort(); } @@ -416,6 +428,16 @@ public class DatagramSocket return true; } + /** + * Returns the connection state of the socket + * + * @since 1.4 + */ + public boolean isConnected() + { + return remoteAddress != null; + } + /** * Returns the InetAddress the socket is connected to * or null if the socket is not connected @@ -424,18 +446,37 @@ public class DatagramSocket */ public InetAddress getInetAddress() { - // FIXME: - return null; + if (!isConnected ()) + return null; + + return remoteAddress; } /** - * Returns the local port number of the socket + * Returns the port number the socket is connected to or -1 if not connected * * @since 1.2 */ public int getPort() { - return impl.localPort; + if (!isConnected ()) + return -1; + + return remotePort; + } + + /** + * Returns the SocketAddress of the host this socket is conneted to + * or null if this socket is not connected + * + * @since 1.4 + */ + public SocketAddress getRemoteSocketAddress() + { + if (!isConnected ()) + return null; + + return new InetSocketAddress (remoteAddress, remotePort); } /** diff --git a/libjava/java/net/JarURLConnection.java b/libjava/java/net/JarURLConnection.java index 8f75622975f..a90c7f33037 100644 --- a/libjava/java/net/JarURLConnection.java +++ b/libjava/java/net/JarURLConnection.java @@ -34,7 +34,7 @@ public abstract class JarURLConnection extends URLConnection * either case this describes just the jar file itself. */ protected URLConnection jarFileURLConnection; - // If this is a connection to a jar file element this is set, otherwose null. + // If this is a connection to a jar file element this is set, otherwise null. private final String element; // Cached JarURLConnection's @@ -349,4 +349,39 @@ public abstract class JarURLConnection extends URLConnection { return getJarEntry().getCertificates(); } + + /** + * Returns the main Attributes for the JAR file for this connection + * + * @exception IOException If an error occurs + */ + public Attributes getMainAttributes () throws IOException + { + return getManifest ().getMainAttributes (); + } + + /** + * Return the Attributes object for this connection if the URL for it points + * to a JAR file entry, null otherwise + * + * @exception IOException If an error occurs + */ + public Attributes getAttributes () throws IOException + { + // FIXME: implement this + return null; + } + + /** + * Returns the Manifest for this connection, or null if none + * + * @exception IOException If an error occurs + */ + public Manifest getManifest () throws IOException + { + JarFile file = getJarFile (); + + // FIXME: implement this + return null; + } } diff --git a/libjava/java/net/NetPermission.java b/libjava/java/net/NetPermission.java index 14732dea49c..f5b625a0d6f 100644 --- a/libjava/java/net/NetPermission.java +++ b/libjava/java/net/NetPermission.java @@ -50,6 +50,8 @@ import java.security.BasicPermission; public final class NetPermission extends BasicPermission implements java.io.Serializable { + static final long serialVersionUID = -8343910153355041693L; + /** * Initializes a new instance of NetPermission with the * specified name. diff --git a/libjava/java/net/Socket.java b/libjava/java/net/Socket.java index 9f01b78012a..82265dd32f9 100644 --- a/libjava/java/net/Socket.java +++ b/libjava/java/net/Socket.java @@ -39,6 +39,7 @@ package java.net; import java.io.*; import java.nio.channels.SocketChannel; +import java.nio.channels.IllegalBlockingModeException; /* Written using on-line Java Platform 1.2 API Specification. * Status: I believe all methods are implemented. @@ -80,7 +81,7 @@ public class Socket SocketImpl impl; SocketChannel ch; // this field must have been set if created by SocketChannel - + // Constructors /** @@ -310,7 +311,8 @@ public class Socket * * @exception IOException If an error occurs * @exception IllegalArgumentException If the addess type is not supported - * @exception IllegalBlockingModeException FIXME + * @exception IllegalBlockingModeException If this socket has an associated + * channel, and the channel is in non-blocking mode * * @since 1.4 */ @@ -320,6 +322,9 @@ public class Socket if (! (endpoint instanceof InetSocketAddress)) throw new IllegalArgumentException ("Address type not supported"); + if (ch != null && !ch.isBlocking ()) + throw new IllegalBlockingModeException (); + impl.connect (endpoint, 0); } @@ -332,7 +337,8 @@ public class Socket * * @exception IOException If an error occurs * @exception IllegalArgumentException If the address type is not supported - * @exception IllegalBlockingModeException FIXME + * @exception IllegalBlockingModeException If this socket has an associated + * channel, and the channel is in non-blocking mode * @exception SocketTimeoutException If the timeout is reached * * @since 1.4 @@ -343,6 +349,9 @@ public class Socket if (! (endpoint instanceof InetSocketAddress)) throw new IllegalArgumentException ("Address type not supported"); + if (ch != null && !ch.isBlocking ()) + throw new IllegalBlockingModeException (); + impl.connect (endpoint, timeout); } @@ -432,16 +441,10 @@ public class Socket */ public SocketAddress getLocalSocketAddress() { - InetAddress addr; + InetAddress addr = getLocalAddress (); - try - { - addr = (InetAddress) impl.getOption (SocketOptions.SO_BINDADDR); - } - catch (SocketException e) - { - return null; - } + if (addr == null) + return null; return new InetSocketAddress (addr, impl.getLocalPort()); } @@ -454,8 +457,7 @@ public class Socket */ public SocketAddress getRemoteSocketAddress() { - // FIXME: Implement this - return null; + return new InetSocketAddress (impl.getInetAddress (), impl.getPort ()); } /** @@ -701,7 +703,7 @@ public class Socket * @param size The new send buffer size. * * @exception SocketException If an error occurs or Socket not connected - * @exception IllegalArgumentException FIXME + * @exception IllegalArgumentException If size is 0 or negative * * @since 1.2 */ @@ -990,4 +992,12 @@ public class Socket impl.setOption (SocketOptions.IP_TOS, new Integer (tc)); } + + /** + * Checks if the socket is already bound. + */ + public boolean isBound () + { + return getLocalAddress () != null; + } } diff --git a/libjava/java/net/SocketAddress.java b/libjava/java/net/SocketAddress.java index d37020b8e71..af20fba7bfa 100644 --- a/libjava/java/net/SocketAddress.java +++ b/libjava/java/net/SocketAddress.java @@ -47,8 +47,10 @@ import java.io.*; public abstract class SocketAddress implements Serializable { - public SocketAddress() - { - } + static final long serialVersionUID = 5215720748342549866L; + + public SocketAddress() + { + } } diff --git a/libjava/java/net/SocketPermission.java b/libjava/java/net/SocketPermission.java index 002a99c15cf..061ec9c80fe 100644 --- a/libjava/java/net/SocketPermission.java +++ b/libjava/java/net/SocketPermission.java @@ -37,6 +37,7 @@ exception statement from your version. */ package java.net; +import java.io.Serializable; import java.security.Permission; import java.security.PermissionCollection; @@ -100,8 +101,9 @@ import java.security.PermissionCollection; * @author Aaron M. Renn (arenn@urbanophile.com) */ public final class SocketPermission extends Permission - implements java.io.Serializable + implements Serializable { + static final long serialVersionUID = -7204263841984476862L; // FIXME: Needs serialization work, including readObject/writeObject methods. /** diff --git a/libjava/java/net/URL.java b/libjava/java/net/URL.java index 73edeca415d..226ad6ca68c 100644 --- a/libjava/java/net/URL.java +++ b/libjava/java/net/URL.java @@ -28,9 +28,12 @@ import java.util.StringTokenizer; public final class URL implements Serializable { private String protocol; + private String authority; + private String userInfo; private String host; private int port = -1; // Initialize for constructor using context. private String file; + private String query; private String ref; private int hashCode = 0; transient private URLStreamHandler handler; @@ -39,19 +42,50 @@ public final class URL implements Serializable private static final long serialVersionUID = -7627629688361524110L; + /** + * Creates an URL object from the given arguments + * + * @param protocol The protocol of the URL + * @param host The host of the URL + * @param port The port of the URL + * @param file The file of the URL + * + * @exception MalformedURLException If an error occurs + */ public URL(String protocol, String host, int port, String file) throws MalformedURLException { this(protocol, host, port, file, null); } + /** + * Creates an URL object from the given arguments + * + * @param protocol The protocol of the URL + * @param host The host of the URL + * @param file The file of the URL + * + * @exception MalformedURLException If an error occurs + */ public URL(String protocol, String host, String file) throws MalformedURLException { this(protocol, host, -1, file, null); } - // JDK1.2 + /** + * Creates an URL object from the given arguments + * + * @param protocol The protocol of the URL + * @param host The host of the URL + * @param port The port of the URL + * @param file The file of the URL + * @param handler The stream handler for the URL + * + * @exception MalformedURLException If an error occurs + * + * @since 1.2 + */ public URL(String protocol, String host, int port, String file, URLStreamHandler handler) throws MalformedURLException { @@ -76,11 +110,14 @@ public final class URL implements Serializable this.handler = setURLStreamHandler(protocol); if (this.handler == null) - throw new MalformedURLException("Protocol handler not found: " + protocol); + throw new MalformedURLException ( + "Protocol handler not found: " + protocol); this.host = host; - this.port = port; + this.userInfo = null; + this.authority = null; + this.query = null; int hashAt = file.indexOf('#'); if (hashAt < 0) @@ -96,17 +133,42 @@ public final class URL implements Serializable hashCode = hashCode(); // Used for serialization. } + /** + * Creates an URL object from the given arguments + * + * @param spec The string to parse an URL + * + * @exception MalformedURLException If an error occurs + */ public URL(String spec) throws MalformedURLException { this((URL) null, spec, (URLStreamHandler) null); } + /** + * Creates an URL object from the given arguments + * + * @param context The context on which to parse the specification + * @param spec The string to parse an URL + * + * @exception MalformedURLException If an error occurs + */ public URL(URL context, String spec) throws MalformedURLException { this(context, spec, (URLStreamHandler) null); } - // JDK1.2 + /** + * Creates an URL from given arguments + * + * @param context The context in which to parse the specification + * @param spec The string to parse as an URL + * @param handler The stream handler for the URL + * + * @exception MalformedURLException If an error occurs + * + * @since 1.2 + */ public URL(URL context, String spec, URLStreamHandler handler) throws MalformedURLException { @@ -142,6 +204,9 @@ public final class URL implements Serializable host = context.host; port = context.port; file = context.file; + userInfo = context.userInfo; + authority = context.authority; + query = context.query; } } else if (context != null) @@ -153,6 +218,9 @@ public final class URL implements Serializable host = context.host; port = context.port; file = context.file; + userInfo = context.userInfo; + authority = context.authority; + query = context.query; } else // Protocol NOT specified in spec. and no context available. throw new @@ -202,14 +270,25 @@ public final class URL implements Serializable return (port == uObj.port && ((protocol == null && uObj.protocol == null) || (protocol != null && protocol.equals(uObj.protocol))) + && ((userInfo == null && uObj.userInfo == null) + || (userInfo != null && userInfo.equals(uObj.userInfo))) + && ((authority == null && uObj.authority == null) + || (authority != null && authority.equals(uObj.authority))) && ((host == null && uObj.host == null) || (host != null && host.equals(uObj.host))) && ((file == null && uObj.file == null) || (file != null && file.equals(uObj.file))) + && ((query == null && uObj.query == null) + || (query != null && query.equals(uObj.query))) && ((ref == null && uObj.ref == null) || (ref != null && ref.equals(uObj.ref)))); } + /** + * Gets the contents of this URL + * + * @since 1.3 + */ public final Object getContent() throws IOException { return openConnection().getContent(); @@ -220,22 +299,54 @@ public final class URL implements Serializable return file; } + /** + * Returns the path of the URL + * + * @since 1.3 + */ public String getPath() { int quest = file.indexOf('?'); return quest < 0 ? file : file.substring(0, quest); } + /** + * Returns the authority of the URL + * + * @since 1.3 + */ + public String getAuthority() + { + return authority; + } + + /** + * Returns the host of the URL + */ public String getHost() { return host; } + /** + * Returns of port of the URL + */ public int getPort() { return port; } + /** + * Returns the default port of the URL + */ + public int getDefaultPort() + { + return 0; + } + + /** + * Returns the protocol of the URL + */ public String getProtocol() { return protocol; @@ -246,6 +357,9 @@ public final class URL implements Serializable return ref; } + /** + * Returns the user information of the URL + */ public String getUserInfo () { int at = host.indexOf('@'); @@ -290,6 +404,11 @@ public final class URL implements Serializable return handler.sameFile(this, other); } + /** + * Sets the specified fields of the URL. This is not a public method so + * that only URLStreamHandlers can modify URL fields. URLs are otherwise + * constant + */ protected void set(String protocol, String host, int port, String file, String ref) { @@ -299,14 +418,23 @@ public final class URL implements Serializable // be aware of this. this.handler = setURLStreamHandler(protocol); this.protocol = protocol; + this.authority = null; + this.userInfo = null; this.port = port; this.host = host; this.file = file; + this.query = null; this.ref = ref; hashCode = hashCode(); // Used for serialization. } - /** @since 1.3 */ + /** + * Sets the specified fields of the URL. This is not a public method so + * that only URLStreamHandlers can modify URL fields. URLs are otherwise + * constant + * + * @since 1.3 + */ protected void set(String protocol, String host, int port, String authority, String userInfo, String path, String query, String ref) diff --git a/libjava/java/net/URLStreamHandler.java b/libjava/java/net/URLStreamHandler.java index ea21ee928e5..cade4f3d066 100644 --- a/libjava/java/net/URLStreamHandler.java +++ b/libjava/java/net/URLStreamHandler.java @@ -183,6 +183,29 @@ public abstract class URLStreamHandler u.set(protocol, host, port, file, ref); } + /** + * Sets the fields of the URL argument to the indicated values + * + * @param u The URL to modify + * @param protocol The protocol to set + * @param host The host name to set + * @param port The port number to set + * @param authority The authority to set + * @param userInfo The user information to set + * @param path The path/filename to set + * @param query The query part to set + * @param ref The reference + * + * @exception SecurityException If the protocol handler of the URL is + * different from this one + */ + protected void setURL(URL u, String protocol, String host, int port, + String authority, String userInfo, String path, + String query, String ref) + { + u.set(protocol, host, port, authority, userInfo, path, query, ref); + } + /** * Converts an URL of a specific protocol to a string * diff --git a/libjava/java/net/natPlainDatagramSocketImpl.cc b/libjava/java/net/natPlainDatagramSocketImpl.cc index 82e280631a8..291243928f2 100644 --- a/libjava/java/net/natPlainDatagramSocketImpl.cc +++ b/libjava/java/net/natPlainDatagramSocketImpl.cc @@ -89,14 +89,14 @@ java::net::PlainDatagramSocketImpl::bind (jint, java::net::InetAddress *) void java::net::PlainDatagramSocketImpl::connect (java::net::InetAddress *, jint) { - throw new java::io::SocketException ( + throw new SocketException ( JvNewStringLatin1 ("DatagramSocketImpl.connect: unimplemented")); } void java::net::PlainDatagramSocketImpl::disconnect () { - throw new java::io::SocketException ( + throw new SocketException ( JvNewStringLatin1 ("DatagramSocketImpl.disconnect: unimplemented")); }