JavaNativeMethodImpl_OpenJDK6.st
branchdevelopment
changeset 2655 4f6d57ffc179
parent 2654 0f8212d15bfd
child 2656 415a8ada238c
--- a/JavaNativeMethodImpl_OpenJDK6.st	Tue Aug 13 11:56:17 2013 +0100
+++ b/JavaNativeMethodImpl_OpenJDK6.st	Thu Aug 15 22:31:51 2013 +0100
@@ -11877,9 +11877,9 @@
 
     <javanative: 'java/net/Inet4Address' name: 'init()V'>
 
-    "Nothing to do"
-
-    "Modified: / 13-09-2011 / 22:31:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    _java_net_Inet4Address_CLASS := this.
+
+    "Modified: / 14-08-2013 / 00:13:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 _java_net_Inet6AddressImpl_getHostByAddr: this _: a1
@@ -11930,12 +11930,21 @@
 
 _java_net_InetAddress_init: this
 
-    <javanative: 'java/net/InetAddress' name: 'init()V'>
-
-    "Nothing to do"
+    <javanative: 'java/net/Inet4Address' name: 'init()V'>
+
+    _java_net_InetAddress_CLASS := this.
+    _java_net_InetAddress_CLASS instSize == 3 ifTrue:[
+        _java_net_InetAddress_holder_ID := _java_net_InetAddress_CLASS instVarIndexFor: #holder.
+
+    ] ifFalse:[
+        _java_net_InetAddress_family_ID  := _java_net_InetAddress_CLASS instVarIndexFor: #family.
+        _java_net_InetAddress_address_ID := _java_net_InetAddress_CLASS instVarIndexFor: #address.
+        _java_net_InetAddress_hostName_ID := _java_net_InetAddress_CLASS instVarIndexFor: #hostName.
+    ].
+    _java_net_InetAddress_canonicalHostName_ID := _java_net_InetAddress_CLASS instVarIndexFor: #canonicalHostName.
 
     "Created: / 27-01-1998 / 18:16:40 / cg"
-    "Modified (comment): / 13-09-2011 / 22:32:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 14-08-2013 / 00:14:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 _java_net_NetworkInterface_getAll: this
@@ -12114,7 +12123,7 @@
         ('JAVA: create datagram socket') infoPrintCR.
     ].
 
-    sock := self commonOpenStreamUsing:[Socket newUDP].
+    sock := self commonOpenStreamUsing:[JavaSocket newUDP].
     sock isNil ifTrue:[
         JavaVM throwIOExceptionWithMessage:'socketCreate failed'.
     ].
@@ -12126,7 +12135,7 @@
 
     "Created: / 25-01-1998 / 19:59:25 / cg"
     "Modified: / 30-12-1998 / 20:10:38 / cg"
-    "Modified: / 23-07-2012 / 19:37:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 15-08-2013 / 21:38:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 _java_net_PlainDatagramSocketImpl_disconnect0: this _: a1
@@ -12154,9 +12163,10 @@
 
     <javanative: 'java/net/PlainDatagramSocketImpl' name: 'init()V'>
 
-    "Nothing to do"
-
-    "Modified: / 13-09-2011 / 22:36:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    _java_net_PlainDatagramSocketImpl_CLASS := this.
+    _java_net_PlainDatagramSocketImpl_timeout_ID := _java_net_PlainDatagramSocketImpl_CLASS instVarIndexFor: #timeout.
+
+    "Modified: / 15-08-2013 / 22:04:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 _java_net_PlainDatagramSocketImpl_join: this _: a1 _: a2
@@ -12187,7 +12197,7 @@
     ^ JavaVM unimplementedNativeMethodSignal raise
 !
 
-_java_net_PlainDatagramSocketImpl_receive0: this _:a1
+_java_net_PlainDatagramSocketImpl_receive0: this _: packet
 
     <javanative: 'java/net/PlainDatagramSocketImpl' name: 'receive0(Ljava/net/DatagramPacket;)V'>
     "
@@ -12205,37 +12215,66 @@
      */
     "
 
-"/    | 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
+    | sock sockaddr dbuffer offset len address tout |
+
+    sock := self validateFile: this. 
+    sockaddr := IPSocketAddress new.
+    dbuffer := packet instVarAt: _java_net_DatagramPacket_buf_ID.
+    offset  := packet instVarAt: _java_net_DatagramPacket_offset_ID.
+    len     := packet instVarAt: _java_net_DatagramPacket_length_ID.
+    tout    := this instVarAt: _java_net_PlainDatagramSocketImpl_timeout_ID.
+
+    [
+        tout ~~ 0 ifTrue:[
+            (sock readWaitWithTimeoutMs: tout) ifTrue:[
+                JavaVM throwInterruptedIOException: 'Timeout occured when receiving datagram'.
+                ^ nil.
+            ]
+        ].
+        sock receiveFrom:sockaddr buffer: dbuffer start:offset + 1 for: len.
+    ] on: Error do:[:ex|
+        JavaVM throwIOExceptionWithMessage: ex description.
+    ].
+
+    address := _java_net_Inet4Address_CLASS new.
+    address perform: #'<init>(Ljava/lang/String;[B)V' with: nil with: sockaddr hostAddress.
+    packet instVarAt: _java_net_DatagramPacket_address_ID put: address.
+    packet instVarAt: _java_net_DatagramPacket_port_ID put: sockaddr port.
+
+    "Modified: / 15-08-2013 / 22:05:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+_java_net_PlainDatagramSocketImpl_send: this _:packet
 
     <javanative: 'java/net/PlainDatagramSocketImpl' name: 'send(Ljava/net/DatagramPacket;)V'>
 
-        |jsock jdatagramPacket sock ok|
-
-    jsock := this.
-    jdatagramPacket := a1.
-
-    sock := self validateFile:jsock.
-    sock notNil ifTrue:[
-        FileIOTrace ifTrue:[
-            ('JAVA: socket send') infoPrintCR
-        ].
-        ^ -1.
-    ].
-    ^ -1
-
-    "Created: / 4.2.1998 / 15:06:20 / cg"
-    "Modified: / 30.12.1998 / 20:10:16 / cg"
+    | sock address sockaddr dbuffer offset len |
+
+    sock := self validateFile:this.
+    address := packet instVarAt: _java_net_DatagramPacket_address_ID.
+    address isNil ifTrue:[
+        JavaVM throwNullPointerException: 'null address in datagram packet'. 
+    ].
+    sockaddr := IPSocketAddress new.
+    sockaddr hostAddress: (address perform: #'getAddress()[B').    
+    sockaddr port: (packet instVarAt: _java_net_DatagramPacket_port_ID).
+    sockaddr port == 0 ifTrue:[
+        JavaVM throwIOExceptionWithMessage: 'port 0 is reserved'.
+        ^nil.
+    ].
+    dbuffer := packet instVarAt: _java_net_DatagramPacket_buf_ID.
+    offset  := packet instVarAt: _java_net_DatagramPacket_offset_ID.
+    len     := packet instVarAt: _java_net_DatagramPacket_length_ID.
+
+    [
+        sock sendTo: sockaddr buffer: dbuffer start: offset + 1 for: len
+    ] on: Error do:[:ex|
+        JavaVM throwIOExceptionWithMessage: ex description.
+    ]
+
+    "Created: / 04-02-1998 / 15:06:20 / cg"
+    "Modified: / 30-12-1998 / 20:10:16 / cg"
+    "Modified: / 14-08-2013 / 00:09:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 _java_net_PlainDatagramSocketImpl_setTTL: this _: a1
@@ -12324,47 +12363,77 @@
 
     <javanative: 'java/net/PlainDatagramSocketImpl' name: 'socketSetOption(ILjava/lang/Object;)V'>
 
-        "/ native void socketSetOption (int arg1, java.lang.Object arg2)
-
-    |jsock opt optVal sock ok err jSocketOptions|
-
-    jsock := this.
+    | opt val sock o arg1 arg2 |
     opt := a1.
-    optVal := a2.
-
-    sock := self validateFile:jsock.
-    sock notNil ifTrue:[
-        FileIOTrace ifTrue:[
-            ('JAVA: socket setOption ' , opt printString) infoPrintCR
-        ].
-
-        jSocketOptions := Java at:'java.net.SocketOptions'.
-        (opt == (jSocketOptions instVarNamed:'TCP_NODELAY')) ifTrue:[
-        ] ifFalse:[
-            (opt == (jSocketOptions instVarNamed:'SO_BINDADDR')) ifTrue:[
-            ] ifFalse:[
-                (opt == (jSocketOptions instVarNamed:'SO_REUSEADDR')) ifTrue:[
-                ] ifFalse:[
-                    (opt == (jSocketOptions instVarNamed:'IP_MULTICAST_IF')) ifTrue:[
-                    ] ifFalse:[
-                        (opt == (jSocketOptions instVarNamed:'SO_LINGER')) ifTrue:[
-                        ] ifFalse:[
-                            (opt == (jSocketOptions instVarNamed:'SO_TIMEOUT')) ifTrue:[
-                            ] ifFalse:[
-                                JavaVM throwIOExceptionWithMessage:'bad arg to setOption'.
-                            ]
-                        ]
-                    ]
-                ]
-            ]
-        ].
-        JavaVM throwIOExceptionWithMessage:'unimplemented: setOption'.
-self halt.
-        ^ nil.  "/ void
-    ].
-
-    "Created: / 4.2.1998 / 15:06:20 / cg"
-    "Modified: / 30.12.1998 / 20:10:16 / cg"
+    val  := a2.
+
+    sock := self validateFile: this.
+
+"/  TCP_NODELAY = 1;
+    opt = 1 ifTrue:[
+        o := #TCP_NODELAY.
+        arg1 := (val instVarNamed: #value == 1)
+    ].
+"/  SO_BINDADDR = 15;
+    opt = 15 ifTrue:[
+        ^self "/Unsupported
+    ].
+
+"/  SO_REUSEADDR = 4;
+    opt = 4 ifTrue:[
+        o := #SO_REUSEADDR.
+        arg1 := ((val instVarNamed: #value) == 1)
+    ].
+"/  IP_TOS = 3;
+    opt = 3 ifTrue:[
+        ^self "/Unssuported
+    ].
+"/  SO_LINGER = 128;
+"/    opt = 128 ifTrue:[
+"/        o := #SO_LINGER.
+"/        arg1 := (on == 1).
+"/        arg2 := val instVarNamed: #value.
+"/    ].
+
+"/  SO_TIMEOUT = 4102;
+    opt = 4102 ifTrue:[
+        JavaVM internalError: 'Should not happen!!'.
+        ^nil
+                   .
+    ].
+"/  SO_SNDBUF = 4097;
+    opt = 4097 ifTrue:[
+        o := #SO_SNDBUF.
+        arg1 := val instVarNamed: #value.
+    ].
+
+"/  SO_RCVBUF = 4098;
+    opt = 4098 ifTrue:[
+        o := #SO_RCVBUF.
+        arg1 := val instVarNamed: #value.
+    ].
+
+"/  SO_KEEPALIVE = 8;
+    opt = 8 ifTrue:[
+        o := #SO_KEEPALIVE.
+        arg1 := ((val instVarNamed: #value) == 1)
+    ].
+
+"/  SO_OOBINLINE = 4099;
+    opt = 4099 ifTrue:[
+        o := #SO_OOBINLINE.
+        arg1 := ((val instVarNamed: #value) == 1)
+    ].
+
+    [
+        sock setSocketOption: o argument: arg1 argument: arg2.
+    ] on: Error do:[:ex|
+        JavaVM throwSocketException:'Error setting socket option: ' , ex description.
+    ].
+
+    "Created: / 04-02-1998 / 15:06:20 / cg"
+    "Modified: / 30-12-1998 / 20:10:16 / cg"
+    "Modified: / 15-08-2013 / 22:02:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 _java_net_PlainSocketImpl_initProto: this
@@ -12776,7 +12845,8 @@
     ].
 "/  SO_TIMEOUT = 4102;
     opt = 4102 ifTrue:[
-        ^self "/Unssuported
+        sock timeout: (val instVarNamed: #value).
+        ^self
                    .
     ].
 "/  SO_SNDBUF = 4097;
@@ -12806,11 +12876,10 @@
     [
         sock setSocketOption: o argument: arg1 argument: arg2.
     ] on: Error do:[:ex|
-        JavaVM
-    throwSocketException:'Error setting socket option: ' , ex description.
-    ].
-
-    "Modified: / 13-11-2011 / 23:05:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+        JavaVM throwSocketException:'Error setting socket option: ' , ex description.
+    ].
+
+    "Modified: / 14-08-2013 / 15:37:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 _java_net_PlainSocketImpl_socketShutdown: this _: a1