You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by py...@apache.org on 2006/07/27 11:37:42 UTC

svn commit: r426019 - in /incubator/harmony/enhanced/classlib/trunk/modules: luni/src/main/java/org/apache/harmony/luni/platform/ luni/src/main/native/luni/linux/ luni/src/main/native/luni/shared/ luni/src/main/native/luni/windows/ nio/src/main/java/or...

Author: pyang
Date: Thu Jul 27 02:37:41 2006
New Revision: 426019

URL: http://svn.apache.org/viewvc?rev=426019&view=rev
Log:
Fix for HARMONY-961 ([classlib][nio]java.nio.channels.spi.SelectorProvider.inheritedChannel must be implemented)

Modified:
    incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/platform/INetworkSystem.java
    incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/platform/OSNetworkSystem.java
    incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/linux/OSNetworkSystemLinux.c
    incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/linux/libhyluni.exp
    incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/shared/OSNetworkSystem.h
    incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/shared/nethelp.c
    incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/shared/nethelp.h
    incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/windows/OSNetworkSystemWin32.c
    incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/windows/hyluni.def
    incubator/harmony/enhanced/classlib/trunk/modules/nio/src/main/java/org/apache/harmony/nio/internal/DatagramChannelImpl.java
    incubator/harmony/enhanced/classlib/trunk/modules/nio/src/main/java/org/apache/harmony/nio/internal/ServerSocketChannelImpl.java
    incubator/harmony/enhanced/classlib/trunk/modules/nio/src/main/java/org/apache/harmony/nio/internal/SocketChannelImpl.java

Modified: incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/platform/INetworkSystem.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/platform/INetworkSystem.java?rev=426019&r1=426018&r2=426019&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/platform/INetworkSystem.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/platform/INetworkSystem.java Thu Jul 27 02:37:41 2006
@@ -22,6 +22,7 @@
 import java.net.SocketException;
 import java.net.SocketImpl;
 import java.net.UnknownHostException;
+import java.nio.channels.Channel;
 import java.nio.channels.SelectableChannel;
 
 /*
@@ -198,5 +199,7 @@
 
 	public void setInetAddress(InetAddress sender, byte[] address);
 	
-	public boolean isReachableByICMP(InetAddress dest,InetAddress source,int ttl,int timeout);    
+	public boolean isReachableByICMP(InetAddress dest,InetAddress source,int ttl,int timeout);
+	
+	public Channel inheritedChannel();
 }

Modified: incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/platform/OSNetworkSystem.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/platform/OSNetworkSystem.java?rev=426019&r1=426018&r2=426019&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/platform/OSNetworkSystem.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/platform/OSNetworkSystem.java Thu Jul 27 02:37:41 2006
@@ -22,6 +22,7 @@
 import java.net.SocketException;
 import java.net.SocketImpl;
 import java.net.UnknownHostException;
+import java.nio.channels.Channel;
 import java.nio.channels.SelectableChannel;
 
 /*
@@ -670,5 +671,10 @@
 
     native int isReachableByICMPImpl(InetAddress addr, InetAddress local,
             int ttl, int timeout);
+    
+    native Channel inheritedChannelImpl();
 
+	public Channel inheritedChannel() {
+		return inheritedChannelImpl();
+	}
 }

Modified: incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/linux/OSNetworkSystemLinux.c
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/linux/OSNetworkSystemLinux.c?rev=426019&r1=426018&r2=426019&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/linux/OSNetworkSystemLinux.c (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/linux/OSNetworkSystemLinux.c Thu Jul 27 02:37:41 2006
@@ -20,6 +20,7 @@
 #include "jclglob.h"
 #include "hysock.h"
 #include "hyport.h"
+#include "jni.h"
 #include "OSNetworkSystem.h"
 #define NOPRIVILEGE -1
 #define UNREACHABLE -2
@@ -263,4 +264,155 @@
   /* return both correct and error result, let java code handle	the exception*/
   return result;
 };
+
+JNIEXPORT jobject JNICALL Java_org_apache_harmony_luni_platform_OSNetworkSystem_inheritedChannelImpl
+  (JNIEnv * env , jobject clz){
+  	PORT_ACCESS_FROM_ENV (env);
+        int socket = 0;
+        int opt;
+	int length = sizeof(opt);
+        int socket_type;
+        struct sockaddr_in local_addr;
+        struct sockaddr_in remote_addr;
+        jclass channel_class,fd_class, addr_class, socketaddr_class,serverSocket_class,socketImpl_class;
+        jobject channel_object, socketaddr_object, addr_object,localAddr_object, serverSocket_object,socketImpl_object;
+	jfieldID port_field, addr_field, socketaddr_field,addrarray_field, localAddr_field, bound_field;
+	jfieldID serverSocket_field,socketImpl_field;
+	jmethodID addr_new,channel_new;
+	hysocket_t sock;
+	jbyte * address;
+	jbyte * localAddr;
+        jbyteArray addr_array;
+	jboolean jtrue = TRUE;
+
+	if(0 != getsockopt(socket,SOL_SOCKET,SO_TYPE,&opt,&length)){
+		return NULL;
+	}
+	if(SOCK_STREAM !=opt && SOCK_DGRAM !=opt){
+		return NULL;
+	}
+	socket_type = opt;
+
+	length  = sizeof(struct sockaddr);
+	if(0 != getsockname(socket,(struct sockaddr *)&local_addr,&length)){
+		return NULL;
+	} else {
+		if(AF_INET != local_addr.sin_family || length != sizeof(struct sockaddr)){
+			return NULL;
+		}
+		localAddr = malloc(sizeof(jbyte)*4);
+		if (NULL == localAddr){
+			return NULL;
+		}
+		memcpy (localAddr, &(local_addr.sin_addr.s_addr), 4); 
+	}
+	if(0 != getpeername(socket,(struct sockaddr *)&remote_addr,&length))	{
+		remote_addr.sin_port = 0;
+                remote_addr.sin_addr.s_addr = 0;
+		address = malloc(sizeof(jbyte)*4);
+		bzero(address,sizeof(jbyte)*4);
+	} else {
+		if(AF_INET != remote_addr.sin_family || length != sizeof(struct sockaddr))	{
+			return NULL;
+		}
+		address = malloc(sizeof(jbyte)*4);
+		memcpy (address, &(remote_addr.sin_addr.s_addr), 4);
+	}
+	sock = malloc(sizeof(hysocket_struct));
+	sock->sock = socket;
+	sock->family = AF_INET;
+
+	// analysis end, begin pack to java
+        if(SOCK_STREAM == opt)
+        {	  
+	  if(remote_addr.sin_port!=0){
+		//socket
+		channel_class = (*env)->FindClass(env,"org/apache/harmony/nio/internal/SocketChannelImpl");
+        	if(NULL == channel_class) {
+        	    goto clean;
+	        }
+		channel_object = getJavaNioChannelsSocketChannelImplObj(env,channel_class);
+          	if(NULL == channel_object) {
+	            goto clean;
+        	}
+		// new and set FileDescript
+		setFDContent(env, channel_class, channel_object,&sock);
+		// local port
+		setJavaNioChannelsLocalPort(env,channel_class,channel_object,ntohs(local_addr.sin_port));
+	  	// new and set remote addr
+		setSocketAddressContent(env, channel_class,channel_object,address);
+		// localAddr
+		socketaddr_class = (*env)->FindClass(env,"java/net/InetSocketAddress");
+		socketaddr_field = (*env)->GetFieldID(env,channel_class,"connectAddress","Ljava/net/InetSocketAddress;");
+		socketaddr_object = (*env)->GetObjectField(env,channel_object,socketaddr_field);
+		setSocketLocalAddressContent(env,channel_class,channel_object,localAddr);
+		// set port
+		port_field = (*env)->GetFieldID(env,socketaddr_class,"port","I");
+		(*env)->SetIntField(env,socketaddr_object, port_field, ntohs(remote_addr.sin_port));
+		// set bound
+		if (0 != local_addr.sin_port){
+			bound_field = (*env)->GetFieldID(env,channel_class,"isBound","Z");
+			(*env)->SetBooleanField(env,channel_object, bound_field,jtrue);
+		}
+	  } else {
+		//serverSocket	
+		channel_class = (*env)->FindClass(env,"org/apache/harmony/nio/internal/ServerSocketChannelImpl");
+        	if(NULL == channel_class) {
+        	    goto clean;
+	        }
+		channel_object = getJavaNioChannelsSocketChannelImplObj(env,channel_class);
+          	if(NULL == channel_object) {
+	            goto clean;
+        	}
+		serverSocket_field = (*env)->GetFieldID(env,channel_class,"socket","Ljava/net/ServerSocket;");	
+		serverSocket_class = (*env)->FindClass(env,"Ljava/net/ServerSocket;");
+		serverSocket_object = (*env)->GetObjectField(env,channel_object,serverSocket_field);	
+		// set bound
+		if (0 != local_addr.sin_port){		
+			bound_field = (*env)->GetFieldID(env,channel_class,"isBound","Z");
+			(*env)->SetBooleanField(env,channel_object, bound_field,jtrue);			
+			bound_field = (*env)->GetFieldID(env,serverSocket_class,"isBound","Z");
+			(*env)->SetBooleanField(env,serverSocket_object, bound_field,jtrue);
+		}
+		// localAddr
+		socketImpl_class = (*env)->FindClass(env,"java/net/SocketImpl");
+		socketImpl_field = (*env)->GetFieldID(env,channel_class,"impl","Ljava/net/SocketImpl;");
+		socketImpl_object =  (*env)->GetObjectField(env,channel_object,socketImpl_field);
+		if(NULL == socketImpl_object) {
+	             goto clean;
+        	}
+		setServerSocketLocalAddressContent(env, socketImpl_class, socketImpl_object, localAddr);
+		// set port
+		port_field = (*env)->GetFieldID(env,socketImpl_class,"localport","I");
+		(*env)->SetIntField(env,socketImpl_object, port_field, ntohs(local_addr.sin_port));
+	  }	
+        }
+        else
+        {
+          //Datagram Socket
+	  // new DatagramChannel
+	  channel_class = (*env)->FindClass(env,"org/apache/harmony/nio/internal/DatagramChannelImpl");
+          if(NULL == channel_class) {
+              goto clean;
+          }
+          channel_object = getJavaNioChannelsSocketChannelImplObj(env,channel_class);
+          if(NULL == channel_object) {
+              goto clean;
+          }
+	  // new and set FileDescript
+	  setFDContent(env,channel_class,channel_object,&sock);
+	  setJavaNioChannelsLocalPort(env,channel_class,channel_object,ntohs(local_addr.sin_port));
+	  // new and set remote addr
+	  setSocketAddressContent(env, channel_class,channel_object,address);
+	  // set bound
+	  if (0 != local_addr.sin_port){		
+		bound_field = (*env)->GetFieldID(env,channel_class,"isBound","Z");
+		(*env)->SetBooleanField(env,channel_object, bound_field,jtrue);			
+	  }
+        }	
+clean:
+	free(address);
+	free(localAddr);
+	return channel_object;
+}
 

Modified: incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/linux/libhyluni.exp
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/linux/libhyluni.exp?rev=426019&r1=426018&r2=426019&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/linux/libhyluni.exp (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/linux/libhyluni.exp Thu Jul 27 02:37:41 2006
@@ -221,5 +221,6 @@
 		Java_org_apache_harmony_luni_platform_OSNetworkSystem_getHostByNameImpl;
 		Java_org_apache_harmony_luni_platform_OSNetworkSystem_setInetAddressImpl;
         Java_org_apache_harmony_luni_platform_OSNetworkSystem_isReachableByICMPImpl;
+        Java_org_apache_harmony_luni_platform_OSNetworkSystem_inheritedChannelImpl;
 	local : *;
 };

Modified: incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/shared/OSNetworkSystem.h
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/shared/OSNetworkSystem.h?rev=426019&r1=426018&r2=426019&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/shared/OSNetworkSystem.h (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/shared/OSNetworkSystem.h Thu Jul 27 02:37:41 2006
@@ -398,6 +398,15 @@
 JNIEXPORT jint JNICALL Java_org_apache_harmony_luni_platform_OSNetworkSystem_isReachableByICMPImpl
   (JNIEnv *, jobject, jobject, jobject, jint, jint);
 
+/*
+ * Class:     org_apache_harmony_luni_platform_OSNetworkSystem
+ * Method:    inheritedChannelImpl
+ * Signature: ([BII)I
+ */
+JNIEXPORT jobject JNICALL Java_org_apache_harmony_luni_platform_OSNetworkSystem_inheritedChannelImpl
+  (JNIEnv *, jobject);
+
+
 #ifdef __cplusplus
 }
 #endif

Modified: incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/shared/nethelp.c
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/shared/nethelp.c?rev=426019&r1=426018&r2=426019&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/shared/nethelp.c (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/shared/nethelp.c Thu Jul 27 02:37:41 2006
@@ -1736,3 +1736,111 @@
   return (void *) ((*env)->GetLongField (env, fd, descriptorFID));
 }
 
+jobject getJavaNioChannelsSocketChannelImplObj(JNIEnv * env, jclass channel_class){
+          jmethodID channel_new;
+	  jobject channel_object;
+          
+          if(NULL == channel_class) {
+              return NULL;
+          }
+	  channel_new = (*env)->GetMethodID(env, channel_class,"<init>","()V");
+          if(NULL == channel_new) {
+              return NULL;
+          }
+          channel_object = (*env)->NewObject(env,channel_class,channel_new);
+          return channel_object;
+}
+
+void setJavaNioChannelsLocalPort(JNIEnv * env,jclass channel_class,jobject channel_object,int port){
+	// set port
+	jfieldID port_field = (*env)->GetFieldID(env,channel_class,"localPort","I");
+	(*env)->SetIntField(env,channel_object,port_field,port);
+}
+
+void setFDContent(JNIEnv * env, jclass channel_class, jobject channel_object, void * sock){
+	jobject fd_object;
+	jfieldID fd_field = (*env)->GetFieldID(env,channel_class,"fd","Ljava/io/FileDescriptor;");
+	jclass fd_class = (*env)->FindClass(env,"java/io/FileDescriptor");
+	if(NULL == fd_class) {
+		return;
+        }
+	fd_object = (*env)->GetObjectField(env,channel_object,fd_field);
+	if(NULL == fd_object) {
+        	return;
+	}
+	setJavaIoFileDescriptorContents (env, fd_object,sock);
+}
+
+void setSocketAddressContent(JNIEnv * env, jclass channel_class, jobject channel_object,jbyte * address){
+	jmethodID addr_new;
+	jfieldID socketaddr_field,addrarray_field,addr_field;
+	jobject addr_object,socketaddr_object;
+	jclass addr_class,socketaddr_class ;
+	jbyteArray addr_array;
+	addr_class = (*env)->FindClass(env,"Ljava/net/InetAddress;");
+	if(NULL == addr_class) {
+	        return;
+        }
+	addr_new = (*env)->GetMethodID(env,addr_class,"<init>","()V");
+        addr_object = (*env)->NewObject(env,addr_class,addr_new);
+	if(NULL == addr_object) {
+        	return;
+        }
+	socketaddr_class = (*env)->FindClass(env,"java/net/InetSocketAddress");
+	socketaddr_field = (*env)->GetFieldID(env,channel_class,"connectAddress","Ljava/net/InetSocketAddress;");
+	socketaddr_object = (*env)->GetObjectField(env,channel_object,socketaddr_field);
+	if(NULL == socketaddr_object){
+		return;
+	}
+	addr_field = (*env)->GetFieldID(env,socketaddr_class,"addr","Ljava/net/InetAddress;");
+	(*env)->SetObjectField(env, socketaddr_object, addr_field, addr_object);
+	addrarray_field = (*env)->GetFieldID(env,addr_class,"ipaddress","[B");
+	addr_array = (*env)->NewByteArray(env,(jsize)4);		
+        (*env)->SetByteArrayRegion(env,addr_array,(jsize)0,(jsize)4,address);
+	(*env)->SetObjectField(env, addr_object, addrarray_field, addr_array);
+}
+
+void setSocketLocalAddressContent(JNIEnv * env, jclass channel_class, jobject channel_object,jbyte * address){
+	jfieldID addrarray_field;
+	jfieldID localAddr_field = (*env)->GetFieldID(env,channel_class,"localAddress","Ljava/net/InetAddress;");
+	jclass addr_class = (*env)->FindClass(env,"Ljava/net/InetAddress;");
+	jmethodID addr_new = (*env)->GetMethodID(env,addr_class,"<init>","()V");
+	jobject localAddr_object = (*env)->NewObject(env,addr_class,addr_new);
+	jclass socketaddr_class = (*env)->FindClass(env,"java/net/InetSocketAddress");
+	jfieldID socketaddr_field = (*env)->GetFieldID(env,channel_class,"connectAddress","Ljava/net/InetSocketAddress;");
+	jobject socketaddr_object = (*env)->GetObjectField(env,channel_object,socketaddr_field);
+	jbyteArray addr_array;
+	if(NULL == addr_class) {
+              return;
+       	}
+	(*env)->SetObjectField(env, socketaddr_object, localAddr_field, localAddr_object);
+	if(NULL == localAddr_object) {
+              return;
+        }
+	addr_array = (*env)->NewByteArray(env,(jsize)4);	
+	(*env)->SetByteArrayRegion(env,addr_array,(jsize)0,(jsize)4,address);
+	addrarray_field = (*env)->GetFieldID(env,addr_class,"ipaddress","[B");
+	(*env)->SetObjectField(env, localAddr_object, addrarray_field, addr_array);
+}
+
+void setServerSocketLocalAddressContent(JNIEnv * env, jclass socketImpl_class, jobject socketImpl_object, jbyte * localAddr){
+	jmethodID addr_new;
+	jfieldID localAddr_field,addrarray_field;
+	jobject localAddr_object;
+	jbyteArray addr_array;
+	jclass addr_class = (*env)->FindClass(env,"Ljava/net/InetAddress;");
+	if(NULL == addr_class) {
+	        return;
+        }
+	addr_new = (*env)->GetMethodID(env,addr_class,"<init>","()V");
+	localAddr_field = (*env)->GetFieldID(env,socketImpl_class,"address","Ljava/net/InetAddress;");
+	localAddr_object = (*env)->NewObject(env,addr_class,addr_new);
+	if(NULL == localAddr_object) {
+        	return;
+        }
+	(*env)->SetObjectField(env, socketImpl_object, localAddr_field, localAddr_object);
+	addr_array = (*env)->NewByteArray(env,(jsize)4);	
+	(*env)->SetByteArrayRegion(env,addr_array,(jsize)0,(jsize)4,localAddr);
+	addrarray_field = (*env)->GetFieldID(env,addr_class,"ipaddress","[B");
+	(*env)->SetObjectField(env, localAddr_object, addrarray_field, addr_array);
+}

Modified: incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/shared/nethelp.h
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/shared/nethelp.h?rev=426019&r1=426018&r2=426019&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/shared/nethelp.h (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/shared/nethelp.h Thu Jul 27 02:37:41 2006
@@ -1,4 +1,4 @@
-/* Copyright 1998, 2005 The Apache Software Foundation or its licensors, as applicable
+/* Copyright 1998, 2006 The Apache Software Foundation or its licensors, as applicable
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -161,4 +161,17 @@
 void
 setJavaIoFileDescriptorContents (JNIEnv * env, jobject fd,
                                           void *value);
+
+void setSocketAddressContent(JNIEnv * env, jclass channel_class, jobject channel_object,jbyte * address);
+
+void setFDContent(JNIEnv * env, jclass channel_class, jobject channel_object, void * sock);
+
+void setJavaNioChannelsLocalPort(JNIEnv * env,jclass channel_class,jobject channel_object,int port);
+
+jobject getJavaNioChannelsSocketChannelImplObj(JNIEnv * env, jclass channel_class);
+
+jobject getJavaNioChannelsDatagramChannelImplObj(JNIEnv * env);
+
+void setServerSocketLocalAddressContent(JNIEnv * env, jclass socketImpl_class, jobject socketImpl_object, jbyte * localAddr);
+
 #endif /* nethelp_h */

Modified: incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/windows/OSNetworkSystemWin32.c
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/windows/OSNetworkSystemWin32.c?rev=426019&r1=426018&r2=426019&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/windows/OSNetworkSystemWin32.c (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/windows/OSNetworkSystemWin32.c Thu Jul 27 02:37:41 2006
@@ -335,3 +335,9 @@
     icmp_hdr->checksum = ip_checksum((unsigned short *)icmp_hdr, packet_size);
 }
 
+JNIEXPORT jobject JNICALL Java_org_apache_harmony_luni_platform_OSNetworkSystem_inheritedChannelImpl
+  (JNIEnv * env , jobject clz)
+{
+  //inheritedChannel is not supported on windows platform. 
+  return NULL;
+}

Modified: incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/windows/hyluni.def
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/windows/hyluni.def?rev=426019&r1=426018&r2=426019&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/windows/hyluni.def (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/windows/hyluni.def Thu Jul 27 02:37:41 2006
@@ -214,3 +214,4 @@
 	Java_org_apache_harmony_luni_util_FloatingPointParser_parseFltImpl
 	Java_org_apache_harmony_luni_util_NumberConverter_bigIntDigitGeneratorInstImpl
 	Java_org_apache_harmony_luni_platform_OSNetworkSystem_isReachableByICMPImpl
+	Java_org_apache_harmony_luni_platform_OSNetworkSystem_inheritedChannelImpl

Modified: incubator/harmony/enhanced/classlib/trunk/modules/nio/src/main/java/org/apache/harmony/nio/internal/DatagramChannelImpl.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/nio/src/main/java/org/apache/harmony/nio/internal/DatagramChannelImpl.java?rev=426019&r1=426018&r2=426019&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/nio/src/main/java/org/apache/harmony/nio/internal/DatagramChannelImpl.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/nio/src/main/java/org/apache/harmony/nio/internal/DatagramChannelImpl.java Thu Jul 27 02:37:41 2006
@@ -107,6 +107,15 @@
         fd = new FileDescriptor();
         networkSystem.createDatagramSocket(fd, true);
     }
+    
+    /*
+     * for native call
+     */
+    private DatagramChannelImpl() throws IOException {
+        super(SelectorProvider.provider());
+        fd = new FileDescriptor();
+        connectAddress = new InetSocketAddress(0);
+    }
 
     // -------------------------------------------------------------------
     // Methods for getting internal DatagramSocket.

Modified: incubator/harmony/enhanced/classlib/trunk/modules/nio/src/main/java/org/apache/harmony/nio/internal/ServerSocketChannelImpl.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/nio/src/main/java/org/apache/harmony/nio/internal/ServerSocketChannelImpl.java?rev=426019&r1=426018&r2=426019&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/nio/src/main/java/org/apache/harmony/nio/internal/ServerSocketChannelImpl.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/nio/src/main/java/org/apache/harmony/nio/internal/ServerSocketChannelImpl.java Thu Jul 27 02:37:41 2006
@@ -89,6 +89,16 @@
         impl = SocketImplProvider.getServerSocketImpl(fd);
         socket = new ServerSocketAdapter(impl, this);
     }
+    
+    // for native call
+    private ServerSocketChannelImpl() throws IOException {
+        super(SelectorProvider.provider());
+        status = SERVER_STATUS_OPEN;
+        fd = new FileDescriptor();
+        impl = SocketImplProvider.getServerSocketImpl(fd);        
+        socket = new ServerSocketAdapter(impl, this);
+        isBound = false;
+    }
 
     // ----------------------------------------------------
     // Methods

Modified: incubator/harmony/enhanced/classlib/trunk/modules/nio/src/main/java/org/apache/harmony/nio/internal/SocketChannelImpl.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/nio/src/main/java/org/apache/harmony/nio/internal/SocketChannelImpl.java?rev=426019&r1=426018&r2=426019&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/nio/src/main/java/org/apache/harmony/nio/internal/SocketChannelImpl.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/nio/src/main/java/org/apache/harmony/nio/internal/SocketChannelImpl.java Thu Jul 27 02:37:41 2006
@@ -154,6 +154,16 @@
         networkSystem.createSocket(fd, true);
     }
 
+    /*
+     * for native call
+     */
+    private SocketChannelImpl() throws IOException {
+		super(SelectorProvider.provider());
+		fd = new FileDescriptor();
+		connectAddress = new InetSocketAddress(0);
+		status = SOCKET_STATUS_CONNECTED;
+	}
+    
     // Keep this to see if need next version
     // SocketChannelImpl(SelectorProvider selectorProvider, FileDescriptor fd,
     // SocketImpl si) {