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