--- 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