2003-06-19 Michael Koch <konqueror@gmx.de>
authorMichael Koch <konqueror@gmx.de>
Thu, 19 Jun 2003 16:42:25 +0000 (16:42 +0000)
committerMichael Koch <mkoch@gcc.gnu.org>
Thu, 19 Jun 2003 16:42:25 +0000 (16:42 +0000)
* gnu/java/nio/DatagramChannelImpl.java
(fd): Removed.
(blocking): New member variable.
(socket): Likewise.
(DatagramChannelImpl): Throws IOException, initialize socket.
(socket):Implemented.
(implCloseSelectableChannel): Throws IOException, implemented.
(implConfigureBlocking): Likewise.
(connect): Likewise.
(disconnect): Likewise.
(isConnected): Likewise.
(write): Likewise.
(read): Likewise.
(receive): Throws IOException.
(send): Likewise.
* gnu/java/nio/SocketChannelImpl.java
(read): Implemented.
(write): Implemented.

From-SVN: r68208

libjava/ChangeLog
libjava/gnu/java/nio/DatagramChannelImpl.java
libjava/gnu/java/nio/SocketChannelImpl.java

index 28446b35ed50aa19ecf68af3878da8cf8fe07084..1705d758b5a3f365f85e654aa65dddb40e2a260b 100644 (file)
@@ -1,3 +1,24 @@
+2003-06-19  Michael Koch  <konqueror@gmx.de>
+
+       * gnu/java/nio/DatagramChannelImpl.java
+       (fd): Removed.
+       (blocking): New member variable.
+       (socket): Likewise.
+       (DatagramChannelImpl): Throws IOException, initialize socket.
+       (socket):Implemented.
+       (implCloseSelectableChannel): Throws IOException, implemented.
+       (implConfigureBlocking): Likewise.
+       (connect): Likewise.
+       (disconnect): Likewise.
+       (isConnected): Likewise.
+       (write): Likewise.
+       (read): Likewise.
+       (receive): Throws IOException.
+       (send): Likewise.
+       * gnu/java/nio/SocketChannelImpl.java
+       (read): Implemented.
+       (write): Implemented.
+
 2003-06-19  Michael Koch  <konqueror@gmx.de>
 
        * javax/swing/JComponent.java,
index a1e0be15912ee8fd6bfa68c5860ad6e32bd94a04..dce7dabcdac6aad20d42ae86cc84f92b483f9fc9 100644 (file)
@@ -35,78 +35,120 @@ 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.nio;
 
+import java.io.IOException;
 import java.net.DatagramSocket;
 import java.net.SocketAddress;
 import java.nio.ByteBuffer;
 import java.nio.channels.DatagramChannel;
+import java.nio.channels.NotYetConnectedException;
 import java.nio.channels.spi.SelectorProvider;
 
 public class DatagramChannelImpl extends DatagramChannel
 {
-  int fd;
-
+  boolean blocking = false;
+  DatagramSocket socket;
+  
   protected DatagramChannelImpl (SelectorProvider provider)
+    throws IOException
   {
     super (provider);
+    socket = new DatagramSocket ();
   }
     
-  protected void implCloseSelectableChannel ()
+  public DatagramSocket socket ()
   {
+    return socket;
   }
     
-  protected void implConfigureBlocking (boolean block)
+  protected void implCloseSelectableChannel ()
+    throws IOException
   {
+    socket.close ();
   }
-
-  public int write (ByteBuffer src)
+    
+  protected void implConfigureBlocking (boolean blocking)
+    throws IOException
   {
-    return 0;
+    this.blocking = blocking; // FIXME
   }
 
-  public long write (ByteBuffer[] srcs, int offset, int length)
+  public DatagramChannel connect (SocketAddress remote)
+    throws IOException
   {
-    return 0;
+    socket.connect (remote);
+    return this;
   }
-
-  public int read (ByteBuffer dst)
+    
+  public DatagramChannel disconnect ()
+    throws IOException
   {
-    return 0;
+    socket.disconnect ();
+    return this;
   }
     
-  public DatagramChannel connect (SocketAddress remote)
+  public boolean isConnected ()
   {
-    return null;
+    return socket.isConnected ();
   }
     
-  public DatagramChannel disconnect ()
+  public int write (ByteBuffer src)
+    throws IOException
   {
-    return null;
-  }
+    if (!isConnected ())
+      throw new NotYetConnectedException ();
     
-  public boolean isConnected ()
+    throw new Error ("Not implemented");
+  }
+
+  public long write (ByteBuffer[] srcs, int offset, int length)
+    throws IOException
   {
-    return false;
+    // FIXME: Should we throw an exception if offset and/or length
+    // have wrong values ?
+
+    long result = 0;
+
+    for (int i = offset; i < offset + length; i++)
+      result += write (srcs [i]);
+
+    return result;
+  }
+
+  public int read (ByteBuffer dst)
+    throws IOException
+  {
+    if (!isConnected ())
+      throw new NotYetConnectedException ();
+    
+    throw new Error ("Not implemented");
   }
     
   public long read (ByteBuffer[] dsts, int offset, int length)
+    throws IOException
   {
-    return 0;
+    // FIXME: Should we throw an exception if offset and/or length
+    // have wrong values ?
+
+    long result = 0;
+
+    for (int i = offset; i < offset + length; i++)
+      result += read (dsts [i]);
+
+    return result;
   }
     
   public SocketAddress receive (ByteBuffer dst)
+    throws IOException
   {
-    return null;
+    throw new Error ("Not implemented");
   }
     
   public int send (ByteBuffer src, SocketAddress target)
+    throws IOException
   {
-    return 0;
-  }
-    
-  public DatagramSocket socket ()
-  {
-    return null;
+    throw new Error ("Not implemented");
   }
 }
index 94913fb8ac7c47af969c2100345a57e11a1a9e76..b721c6d7d5196da2821e33546d142f5b05dc346a 100644 (file)
@@ -118,22 +118,21 @@ public class SocketChannelImpl extends SocketChannel
 
   public int read (ByteBuffer dst) throws IOException
   {
+    byte[] data;
     int bytes = 0;
-    int len = 1024;
-    byte[]b = new byte[len];
+    int len = dst.remaining ();
        
-    /*
-    bytes = SocketRead(fd, b, 0, len);
-    dst.put(b, 0, bytes);
-
-    if (bytes == 0)
+    if (!dst.hasArray ())
       {
-        // we've hit eof ?
-        return -1;
+        data = new byte [len];
+        dst.get (data, 0, len);
       }
-    */
-
-    return bytes;
+    else
+      {
+        data = dst.array ();
+      }
+    
+    return socket.getInputStream().read (data, 0, len);
   }
     
   public long read (ByteBuffer[] dsts, int offset, int length)
@@ -152,24 +151,22 @@ public class SocketChannelImpl extends SocketChannel
   public int write (ByteBuffer src)
     throws IOException
   {
+    byte[] data;
     int bytes = 0;
-    int len = src.position();
-
-    /*
-    if (src.hasArray ())
+    int len = src.remaining ();
+    
+    if (!src.hasArray ())
       {
-        byte[] b = src.array ();
-        bytes = SocketWrite (fd, b, 0, len);
+        data = new byte [len];
+        src.get (data, 0, len);
       }
     else
       {
-        byte[] b = new byte [len];
-        src.get (b, 0, len);
-        bytes = SocketWrite (fd, b, 0, len);
+        data = src.array ();
       }
-    */
-               
-    return bytes;
+   
+    socket.getOutputStream().write (data, 0, len);
+    return len;
   }
 
   public long write (ByteBuffer[] srcs, int offset, int length)