aboutsummaryrefslogtreecommitdiff
path: root/libjava
diff options
context:
space:
mode:
authorMichael Koch <konqueror@gmx.de>2002-09-25 17:14:09 +0000
committerMichael Koch <mkoch@gcc.gnu.org>2002-09-25 17:14:09 +0000
commitfc44b85de78353cb3930e3d59346863bf344ef93 (patch)
treec7f727fc4330f40bf9d00f1200993bfa6656a8ab /libjava
parent6f950405a0751ab26cab5dbca5e4fbcecfa60350 (diff)
downloadgcc-fc44b85de78353cb3930e3d59346863bf344ef93.zip
gcc-fc44b85de78353cb3930e3d59346863bf344ef93.tar.gz
gcc-fc44b85de78353cb3930e3d59346863bf344ef93.tar.bz2
2002-09-25 Michael Koch <konqueror@gmx.de>
* 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
Diffstat (limited to 'libjava')
-rw-r--r--libjava/ChangeLog45
-rw-r--r--libjava/java/net/DatagramSocket.java51
-rw-r--r--libjava/java/net/JarURLConnection.java37
-rw-r--r--libjava/java/net/NetPermission.java2
-rw-r--r--libjava/java/net/Socket.java40
-rw-r--r--libjava/java/net/SocketAddress.java8
-rw-r--r--libjava/java/net/SocketPermission.java4
-rw-r--r--libjava/java/net/URL.java138
-rw-r--r--libjava/java/net/URLStreamHandler.java23
-rw-r--r--libjava/java/net/natPlainDatagramSocketImpl.cc4
10 files changed, 320 insertions, 32 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index c650752..3132150 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,5 +1,50 @@
2002-09-25 Michael Koch <konqueror@gmx.de>
+ * 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 <konqueror@gmx.de>
+
* java/nio/channels/spi/AbstractSelectableChannel.java: New file.
* java/nio/channels/DatagramChannel.java:
extends AbstractSelectableChannel
diff --git a/libjava/java/net/DatagramSocket.java b/libjava/java/net/DatagramSocket.java
index eef638d..dfbce3b 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();
}
@@ -417,6 +429,16 @@ public class DatagramSocket
}
/**
+ * 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 8f75622..a90c7f3 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 14732de..f5b625a 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 <code>NetPermission</code> with the
* specified name.
diff --git a/libjava/java/net/Socket.java b/libjava/java/net/Socket.java
index 9f01b78..82265dd 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 d37020b..af20fba 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 002a99c..061ec9c 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 73edeca..226ad6c 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 ea21ee9..cade4f3 100644
--- a/libjava/java/net/URLStreamHandler.java
+++ b/libjava/java/net/URLStreamHandler.java
@@ -184,6 +184,29 @@ public abstract class URLStreamHandler
}
/**
+ * 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
*
* @param u The URL to convert
diff --git a/libjava/java/net/natPlainDatagramSocketImpl.cc b/libjava/java/net/natPlainDatagramSocketImpl.cc
index 82e2806..2912439 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"));
}