JavaNativeMethodImpl_OpenJDK6.st
branchdevelopment
changeset 2654 0f8212d15bfd
parent 2653 f4a15878dccd
child 2655 4f6d57ffc179
--- a/JavaNativeMethodImpl_OpenJDK6.st	Mon Aug 12 10:28:56 2013 +0100
+++ b/JavaNativeMethodImpl_OpenJDK6.st	Tue Aug 13 11:56:17 2013 +0100
@@ -11796,9 +11796,15 @@
 
     <javanative: 'java/net/DatagramPacket' name: 'init()V'>
 
-    "Nothing to do"
-
-    "Modified: / 13-09-2011 / 22:33:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    _java_net_DatagramPacket_CLASS := this.
+    _java_net_DatagramPacket_buf_ID         := _java_net_DatagramPacket_CLASS instVarIndexFor: #buf.
+    _java_net_DatagramPacket_offset_ID      := _java_net_DatagramPacket_CLASS instVarIndexFor: #offset.
+    _java_net_DatagramPacket_length_ID      := _java_net_DatagramPacket_CLASS instVarIndexFor: #length.
+    _java_net_DatagramPacket_bufLength_ID   := _java_net_DatagramPacket_CLASS instVarIndexFor: #bufLength.
+    _java_net_DatagramPacket_address_ID     := _java_net_DatagramPacket_CLASS instVarIndexFor: #address.
+    _java_net_DatagramPacket_port_ID        := _java_net_DatagramPacket_CLASS instVarIndexFor: #port.
+
+    "Modified: / 13-08-2013 / 11:41:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 _java_net_Inet4AddressImpl_getHostByAddr: this _:a1
@@ -12048,10 +12054,9 @@
     addr = #[0 0 0 0] ifTrue:[
         addr := nil
     ] ifFalse:[
-        JavaVM
-    throwSocketException:'Only all-interface bind is supported by underlaing socket implementation, sorry'.
-        ^nil
-    ].
+        addr := IPSocketAddress hostAddress: addr.
+    ].
+
     [
         sock bindTo: port address: addr reuseAddress: true.
         this instVarNamed: #localPort put: sock port.
@@ -12059,7 +12064,7 @@
         JavaVM throwSocketException:'bind0() failed: ' , ex description
     ]
 
-    "Modified: / 07-11-2011 / 21:45:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 12-08-2013 / 21:25:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 _java_net_PlainDatagramSocketImpl_connect0: this _: a1 _: a2
@@ -12185,8 +12190,30 @@
 _java_net_PlainDatagramSocketImpl_receive0: this _:a1
 
     <javanative: 'java/net/PlainDatagramSocketImpl' name: 'receive0(Ljava/net/DatagramPacket;)V'>
-
-    ^ JavaVM unimplementedNativeMethodSignal raise
+    "
+    /**
+     * Receives a datagram packet from this socket. When this method
+     * returns, the <code>DatagramPacket</code>'s buffer is filled with
+     * the data received. The datagram packet also contains the sender's
+     * IP address, and the port number on the sender's machine.
+     * <p>
+     * This method blocks until a datagram is received. The
+     * <code>length</code> field of the datagram packet object contains
+     * the length of the received message. If the message is longer than
+     * the packet's length, the message is truncated.
+     * ...
+     */
+    "
+
+"/    | sock |
+"/
+"/    sock := self validateFile: this.    
+"/    " / ^ sock receiveFrom:anAddressBuffer buffer:aDataBuffer start:1 for:(aDataBuffer size)
+
+
+    ^ JavaVM unimplementedNativeMethodSignal raise
+
+    "Modified: / 13-08-2013 / 11:52:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 _java_net_PlainDatagramSocketImpl_send: this _:a1
@@ -12225,11 +12252,72 @@
     ^ JavaVM unimplementedNativeMethodSignal raise
 !
 
-_java_net_PlainDatagramSocketImpl_socketGetOption: this _: a1
+_java_net_PlainDatagramSocketImpl_socketGetOption: this _: optid
 
     <javanative: 'java/net/PlainDatagramSocketImpl' name: 'socketGetOption(I)Ljava/lang/Object;'>
 
-    ^ JavaVM unimplementedNativeMethodSignal raise
+    | sock ret |
+
+    sock := self validateFile: this.         
+
+"/    case IP_TOS:
+    optid == 16r1002 ifTrue:[
+        self breakPoint: #jv.
+        ^Java as_Integer:-1 "/Unsupported           
+    ].
+
+"/    case SO_BINDADDR:
+    optid == 16rF ifTrue:[
+        | addr |
+"/        ^ Java as_Integer: (sock getSocketAddress doubleWordAt:1) 
+        addr := sock getFullSocketAddress.
+        ^ (JavaVM classForName:'java.net.Inet4Address') basicNew 
+                perform: #'<init>(Ljava/lang/String;[B)V'
+                with: (Java as_String: addr hostName)
+                with: (addr hostAddress);
+                yourself
+
+    ].
+
+"/    case IP_MULTICAST_IF:
+    optid == 16r10 ifTrue:[
+
+    ].
+
+"/    case IP_MULTICAST_IF2:
+    optid == 16r1f ifTrue:[
+
+    ].
+
+"/    case SO_RCVBUF:
+    optid == 16r1002 ifTrue:[
+        ^ sock receiveBufferSize
+    ].
+
+"/    case SO_SNDBUF:
+    optid == 16r1001 ifTrue:[
+        ^ sock sendBufferSize
+    ].
+
+"/    case IP_MULTICAST_LOOP:
+    optid == 16r12 ifTrue:[6
+
+    ].
+
+"/    case SO_REUSEADDR:
+    optid == 16r4 ifTrue:[
+        ret := sock getSocketOption: #SO_REUSEADDR.
+        ^ ret ifTrue:[Java as_Integer:1] ifFalse:[Java as_Integer:0].
+    ].
+
+"/    case SO_BROADCAST:
+    optid == 16r20 ifTrue:[
+
+    ].
+
+    ^ Java as_Integer: -1.
+
+    "Modified: / 13-08-2013 / 01:53:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 _java_net_PlainDatagramSocketImpl_socketSetOption: this _:a1 _: a2