You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by to...@apache.org on 2008/03/04 09:02:45 UTC
svn commit: r633384 [6/15] - in /harmony/enhanced/classlib/branches/java6:
depends/build/platform/ depends/files/ depends/files/bcprov/ doc/
doc/classlib/ make/ make/linux.ia64/ make/linux.ppc32/ make/linux.ppc64/
make/linux.x86.libstdc++6/ make/linux....
Modified: harmony/enhanced/classlib/branches/java6/modules/luni/src/main/native/luni/shared/OSNetworkSystem.c
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/luni/src/main/native/luni/shared/OSNetworkSystem.c?rev=633384&r1=633383&r2=633384&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/luni/src/main/native/luni/shared/OSNetworkSystem.c (original)
+++ harmony/enhanced/classlib/branches/java6/modules/luni/src/main/native/luni/shared/OSNetworkSystem.c Tue Mar 4 00:02:13 2008
@@ -1,19 +1,19 @@
/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
#include "OSNetworkSystem.h"
#include "vmi.h"
@@ -24,272 +24,226 @@
#include "socket.h"
#include "harmonyglob.h"
-void setSocketImplPort (JNIEnv * env, jobject socketImpl, U_16 hPort);
-void setSocketImplAddress (JNIEnv * env, jobject socketImpl,
- jobject anInetAddress);
-void updateSocket (JNIEnv * env, hysockaddr_t sockaddrP, hysocket_t socketNew,
- jobject socketImpl, jobject fileDescriptorSocketImpl);
-void * getConnectContext(JNIEnv *env,jobject longclass);
-void setConnectContext(JNIEnv *env,jobject longclass,U_8 * context);
-
-void setDatagramPacketAddress (JNIEnv * env, jobject datagramPacket,
- jobject anInetAddress);
-void setDatagramPacketPort (JNIEnv * env, jobject datagramPacket, U_16 hPort);
-void updateAddress (JNIEnv * env, hysockaddr_t sockaddrP,
- jobject senderAddress);
-void updatePacket (JNIEnv * env, hysockaddr_t sockaddrP,
- jobject datagramPacket, I_32 bytesRead);
-void setDatagramPacketLength (JNIEnv * env, jobject datagramPacket,
- I_32 length);
-int
-selectRead (JNIEnv * env,hysocket_t hysocketP, I_32 uSecTime, BOOLEAN accept);
+void setSocketImplPort(JNIEnv * env, jobject socketImpl, U_16 hPort);
+void setSocketImplAddress(JNIEnv * env, jobject socketImpl,
+ jobject anInetAddress);
+void updateSocket(JNIEnv * env, hysockaddr_t sockaddrP, hysocket_t socketNew,
+ jobject socketImpl, jobject fileDescriptorSocketImpl);
+void *getConnectContext(JNIEnv * env, jobject longclass);
+void setConnectContext(JNIEnv * env, jobject longclass, U_8 * context);
+
+void setDatagramPacketAddress(JNIEnv * env, jobject datagramPacket,
+ jobject anInetAddress);
+void setDatagramPacketPort(JNIEnv * env, jobject datagramPacket, U_16 hPort);
+void updateAddress(JNIEnv * env, hysockaddr_t sockaddrP,
+ jobject senderAddress);
+void updatePacket(JNIEnv * env, hysockaddr_t sockaddrP,
+ jobject datagramPacket, I_32 bytesRead);
+void setDatagramPacketLength(JNIEnv * env, jobject datagramPacket,
+ I_32 length);
+int
+selectRead(JNIEnv * env, hysocket_t hysocketP, I_32 uSecTime, BOOLEAN accept);
/**
* A helper method, to set the remote address into the DatagramPacket.
*
- * @param env pointer to the JNI library
+ * @param env pointer to the JNI library
* @param datagramPacket pointer to the java DatagramPacket object to update
- * @param anInetAddress pointer to the java InetAddress to update the packet with
+ * @param anInetAddress pointer to the java InetAddress to update the packet with
*
*/
-
void
-setDatagramPacketAddress (JNIEnv * env, jobject datagramPacket,
- jobject anInetAddress)
+setDatagramPacketAddress(JNIEnv * env, jobject datagramPacket,
+ jobject anInetAddress)
{
- jfieldID fid = HARMONY_CACHE_GET (env, FID_java_net_DatagramPacket_address);
- (*env)->SetObjectField (env, datagramPacket, fid, anInetAddress);
+ jfieldID fid = HARMONY_CACHE_GET(env, FID_java_net_DatagramPacket_address);
+ (*env)->SetObjectField(env, datagramPacket, fid, anInetAddress);
}
/**
- * A helper method, to set the remote port into the java DatagramPacket.
+ * A helper method, to set the remote port into the java DatagramPacket.
*
- * @param env pointer to the JNI library
+ * @param env pointer to the JNI library
* @param datagramPacket pointer to the java DatagramPacket object to update
- * @param hPort the port value to update the packet with, in host order
+ * @param hPort the port value to update the packet with, in host order
*/
-
void
-setDatagramPacketPort (JNIEnv * env, jobject datagramPacket, U_16 hPort)
+setDatagramPacketPort(JNIEnv * env, jobject datagramPacket, U_16 hPort)
{
- jfieldID fid = HARMONY_CACHE_GET (env, FID_java_net_DatagramPacket_port);
- (*env)->SetIntField (env, datagramPacket, fid, hPort);
+ jfieldID fid = HARMONY_CACHE_GET(env, FID_java_net_DatagramPacket_port);
+ (*env)->SetIntField(env, datagramPacket, fid, hPort);
}
/**
- * A helper method, to set the data length into a java DatagramPacket.
+ * A helper method, to set the data length into a java DatagramPacket.
*
- * @param env pointer to the JNI library
+ * @param env pointer to the JNI library
* @param datagramPacket pointer to the java DatagramPacket object to update
- * @param length the length value to update the packet with
+ * @param length the length value to update the packet with
*/
-
void
-setDatagramPacketLength (JNIEnv * env, jobject datagramPacket, I_32 length)
+setDatagramPacketLength(JNIEnv * env, jobject datagramPacket, I_32 length)
{
- jfieldID fid = HARMONY_CACHE_GET (env, FID_java_net_DatagramPacket_length);
- (*env)->SetIntField (env, datagramPacket, fid, length);
+ jfieldID fid = HARMONY_CACHE_GET(env, FID_java_net_DatagramPacket_length);
+ (*env)->SetIntField(env, datagramPacket, fid, length);
}
/**
- * A helper method, to update the java DatagramPacket argument. Used after receiving a datagram packet,
- * to update the DatagramPacket with the network address and port of the sending machine.
+ * A helper method, to update the java DatagramPacket argument. Used after receiving a datagram packet,
+ * to update the DatagramPacket with the network address and port of the sending machine.
*
- * @param env pointer to the JNI library
- * @param sockaddrP pointer to the hysockaddr struct with the sending host address & port
- * @param datagramPacket pointer to the java DatagramPacket object to update
- * @param bytesRead the bytes read value to update the packet with
+ * @param env pointer to the JNI library
+ * @param sockaddrP pointer to the hysockaddr struct with the sending host address & port
+ * @param datagramPacket pointer to the java DatagramPacket object to update
+ * @param bytesRead the bytes read value to update the packet with
*/
-
void
-updatePacket (JNIEnv * env, hysockaddr_t sockaddrP, jobject datagramPacket,
- I_32 bytesRead)
+updatePacket(JNIEnv * env, hysockaddr_t sockaddrP, jobject datagramPacket,
+ I_32 bytesRead)
{
- PORT_ACCESS_FROM_ENV (env);
+ PORT_ACCESS_FROM_ENV(env);
jobject anInetAddress;
U_16 nPort;
U_32 length;
- U_32 scope_id = 0;
- jbyte byte_array[HYSOCK_INADDR6_LEN];
- hysock_sockaddr_address6 (sockaddrP, (U_8 *) byte_array, &length,
- &scope_id);
-
- nPort = hysock_sockaddr_port (sockaddrP);
- anInetAddress =
- newJavaNetInetAddressGenericB (env, byte_array, length, scope_id);
-
- setDatagramPacketAddress (env, datagramPacket, anInetAddress);
- setDatagramPacketPort (env, datagramPacket, hysock_ntohs (nPort));
- setDatagramPacketLength (env, datagramPacket, bytesRead);
+ U_32 scope_id = 0;
+ jbyte byte_array[HYSOCK_INADDR6_LEN];
+ hysock_sockaddr_address6(sockaddrP, (U_8 *) byte_array, &length, &scope_id);
+
+ nPort = hysock_sockaddr_port(sockaddrP);
+ anInetAddress =
+ newJavaNetInetAddressGenericB(env, byte_array, length, scope_id);
+
+ setDatagramPacketAddress(env, datagramPacket, anInetAddress);
+ setDatagramPacketPort(env, datagramPacket, hysock_ntohs(nPort));
+ setDatagramPacketLength(env, datagramPacket, bytesRead);
}
/**
* A helper method, to set address of the java InetAddress argument.
*
- * @param env pointer to the JNI library
- * @param sockaddrP pointer to the hysockaddr struct containing the network address
- * @param senderAddress pointer to the java InetAddress object to update
+ * @param env pointer to the JNI library
+ * @param sockaddrP pointer to the hysockaddr struct containing the network address
+ * @param senderAddress pointer to the java InetAddress object to update
*/
-
void
-updateAddress (JNIEnv * env, hysockaddr_t sockaddrP, jobject senderAddress)
+updateAddress(JNIEnv * env, hysockaddr_t sockaddrP, jobject senderAddress)
{
- PORT_ACCESS_FROM_ENV (env);
- jbyte ipv4Addr[16];
+ PORT_ACCESS_FROM_ENV(env);
+ jbyte ipv4Addr[16];
U_32 length;
- U_32 scope_id = 0;
- hysock_sockaddr_address6 (sockaddrP, (U_8 *) ipv4Addr, &length, &scope_id);
- (*env)->SetObjectField (env, senderAddress,
- HARMONY_CACHE_GET (env,
- FID_java_net_InetAddress_address),
- newJavaByteArray (env, ipv4Addr, length));
- if (harmony_supports_ipv6(env) && (scope_id != 0))
- {
- jfieldID fid = NULL;
- jclass tempClass = HARMONY_CACHE_GET(env, CLS_java_net_InetAddress);
-
- fid = (*env)->GetFieldID (env, tempClass, "scope_id", "I");
- if ((*env)->ExceptionCheck (env))
- {
- (*env)->ExceptionClear (env);
- }
- else
- {
- (*env)->SetIntField (env, senderAddress, fid, scope_id);
- }
+ U_32 scope_id = 0;
+ hysock_sockaddr_address6(sockaddrP, (U_8 *) ipv4Addr, &length, &scope_id);
+ (*env)->SetObjectField(env, senderAddress,
+ HARMONY_CACHE_GET(env,
+ FID_java_net_InetAddress_address),
+ newJavaByteArray(env, ipv4Addr, length));
+ if (harmony_supports_ipv6(env) && (scope_id != 0)) {
+ jfieldID fid = NULL;
+ jclass tempClass = HARMONY_CACHE_GET(env, CLS_java_net_InetAddress);
+
+ fid = (*env)->GetFieldID(env, tempClass, "scope_id", "I");
+ if ((*env)->ExceptionCheck(env)) {
+ (*env)->ExceptionClear(env);
+ } else {
+ (*env)->SetIntField(env, senderAddress, fid, scope_id);
}
+ }
}
/**
* A helper method, to set the connect context to a Long object.
*
- * @param env pointer to the JNI library
- * @param longclass Java Long Object
+ * @param env pointer to the JNI library
+ * @param longclass Java Long Object
*/
void
-setConnectContext(JNIEnv *env,jobject longclass,U_8 * context){
- jclass descriptorCLS;
+setConnectContext(JNIEnv * env, jobject longclass, U_8 * context)
+{
+ jclass descriptorCLS;
jfieldID descriptorFID;
- descriptorCLS = (*env)->FindClass (env, "java/lang/Long");
- descriptorFID = (*env)->GetFieldID (env, descriptorCLS, "value","J");
- (*env)->SetLongField(env, longclass, descriptorFID,(jlong)((IDATA)context));
+ descriptorCLS = (*env)->FindClass(env, "java/lang/Long");
+ descriptorFID = (*env)->GetFieldID(env, descriptorCLS, "value", "J");
+ (*env)->SetLongField(env, longclass, descriptorFID,
+ (jlong) ((IDATA) context));
};
/**
- * A helper method, to get the connect context.
+ * A helper method, to get the connect context.
*
- * @param env pointer to the JNI library
- * @param longclass Java Long Object
+ * @param env pointer to the JNI library
+ * @param longclass Java Long Object
*/
void *
-getConnectContext(JNIEnv *env,jobject longclass){
- jclass descriptorCLS;
+getConnectContext(JNIEnv * env, jobject longclass)
+{
+ jclass descriptorCLS;
jfieldID descriptorFID;
- descriptorCLS = (*env)->FindClass (env, "java/lang/Long");
- descriptorFID = (*env)->GetFieldID (env, descriptorCLS, "value", "J");
- return (void*) ((IDATA)((*env)->GetLongField(env, longclass, descriptorFID)));
+ descriptorCLS = (*env)->FindClass(env, "java/lang/Long");
+ descriptorFID = (*env)->GetFieldID(env, descriptorCLS, "value", "J");
+ return (void
+ *) ((IDATA) ((*env)->GetLongField(env, longclass, descriptorFID)));
};
/**
* A helper method, to set the remote address into the socketImpl.
*
- * @param env pointer to the JNI library
- * @param socketImpl pointer to the java SocketImpl object to update
- * @param anInetAddress pointer to the java InetAddress to update the socket with
+ * @param env pointer to the JNI library
+ * @param socketImpl pointer to the java SocketImpl object to update
+ * @param anInetAddress pointer to the java InetAddress to update the socket with
*/
-
void
-setSocketImplAddress (JNIEnv * env, jobject socketImpl, jobject anInetAddress)
+setSocketImplAddress(JNIEnv * env, jobject socketImpl, jobject anInetAddress)
{
- jfieldID fid = HARMONY_CACHE_GET (env, FID_java_net_SocketImpl_address);
- (*env)->SetObjectField (env, socketImpl, fid, anInetAddress);
+ jfieldID fid = HARMONY_CACHE_GET(env, FID_java_net_SocketImpl_address);
+ (*env)->SetObjectField(env, socketImpl, fid, anInetAddress);
}
/**
- * A helper method, to set the remote port into the socketImpl.
+ * A helper method, to set the remote port into the socketImpl.
*
- * @param env pointer to the JNI library
- * @param socketImpl pointer to the java SocketImpl object to update
- * @param hPort the port number, in host order, to update the socket with
+ * @param env pointer to the JNI library
+ * @param socketImpl pointer to the java SocketImpl object to update
+ * @param hPort the port number, in host order, to update the socket with
*/
-
void
-setSocketImplPort (JNIEnv * env, jobject socketImpl, U_16 hPort)
+setSocketImplPort(JNIEnv * env, jobject socketImpl, U_16 hPort)
{
- jfieldID fid = HARMONY_CACHE_GET (env, FID_java_net_SocketImpl_port);
- (*env)->SetIntField (env, socketImpl, fid, hPort);
+ jfieldID fid = HARMONY_CACHE_GET(env, FID_java_net_SocketImpl_port);
+ (*env)->SetIntField(env, socketImpl, fid, hPort);
}
/**
- * A helper method, to update the java SocketImpl argument. Used after connecting, to 'link' the
+ * A helper method, to update the java SocketImpl argument. Used after connecting, to 'link' the
* system socket with the java socketImpl and update the address/port fields with the values
- * corresponding to the remote machine.
+ * corresponding to the remote machine.
*
- * @param env pointer to the JNI library
- * @param sockaddrP pointer to the hysockaddr struct with the remote host address & port
- * @param socketNew pointer to the new hysocket
- * @param socketImpl pointer to the new java (connected) socket
- * @param fileDescriptorSocketImpl pointer to the java file descriptor of the socketImpl
+ * @param env pointer to the JNI library
+ * @param sockaddrP pointer to the hysockaddr struct with the remote host address & port
+ * @param socketNew pointer to the new hysocket
+ * @param socketImpl pointer to the new java (connected) socket
+ * @param fileDescriptorSocketImpl pointer to the java file descriptor of the socketImpl
*/
-
void
-updateSocket (JNIEnv * env,
- hysockaddr_t sockaddrP, hysocket_t socketNew,
- jobject socketImpl, jobject fileDescriptorSocketImpl)
+updateSocket(JNIEnv * env,
+ hysockaddr_t sockaddrP, hysocket_t socketNew,
+ jobject socketImpl, jobject fileDescriptorSocketImpl)
{
- PORT_ACCESS_FROM_ENV (env);
+ PORT_ACCESS_FROM_ENV(env);
U_8 nipAddress[HYSOCK_INADDR6_LEN];
U_32 length;
jobject anInetAddress;
U_16 nPort;
- U_32 scope_id = 0;
-
- hysock_sockaddr_address6 (sockaddrP, nipAddress, &length, &scope_id);
- nPort = hysock_sockaddr_port (sockaddrP);
- anInetAddress =
- newJavaNetInetAddressGenericB (env, (jbyte *)nipAddress, length, scope_id);
-
- setJavaIoFileDescriptorContents (env, fileDescriptorSocketImpl,
- socketNew);
- setSocketImplAddress (env, socketImpl, anInetAddress);
- setSocketImplPort (env, socketImpl, hysock_ntohs (nPort));
-}
-
-/*
- * Class: org_apache_harmony_luni_platform_OSNetworkSystem
- * Method: oneTimeInitializationDatagram
- * Signature: (Z)V
- */
-JNIEXPORT void JNICALL Java_org_apache_harmony_luni_platform_OSNetworkSystem_oneTimeInitializationDatagram(JNIEnv * env,
- jclass clazz,
- jboolean
- ipv6support)
-{
- jclass lookupClass;
- jfieldID fid;
-
- netInitializeIDCaches (env, ipv6support);
-
- lookupClass = (*env)->FindClass (env, "java/net/DatagramPacket");
- if (!lookupClass)
- return;
-
- fid =
- (*env)->GetFieldID (env, lookupClass, "address",
- "Ljava/net/InetAddress;");
- if (!fid)
- return;
- HARMONY_CACHE_SET (env, FID_java_net_DatagramPacket_address, fid);
-
- fid = (*env)->GetFieldID (env, lookupClass, "length", "I");
- if (!fid)
- return;
- HARMONY_CACHE_SET (env, FID_java_net_DatagramPacket_length, fid);
+ U_32 scope_id = 0;
- fid = (*env)->GetFieldID (env, lookupClass, "port", "I");
- if (!fid)
- return;
- HARMONY_CACHE_SET (env, FID_java_net_DatagramPacket_port, fid);
+ hysock_sockaddr_address6(sockaddrP, nipAddress, &length, &scope_id);
+ nPort = hysock_sockaddr_port(sockaddrP);
+ anInetAddress =
+ newJavaNetInetAddressGenericB(env, (jbyte *) nipAddress, length,
+ scope_id);
+
+ setJavaIoFileDescriptorContents(env, fileDescriptorSocketImpl, socketNew);
+ setSocketImplAddress(env, socketImpl, anInetAddress);
+ setSocketImplPort(env, socketImpl, hysock_ntohs(nPort));
}
/*
@@ -297,47 +251,48 @@
* Method: oneTimeInitializationImpl
* Signature: (Z)V
*/
-JNIEXPORT void JNICALL Java_org_apache_harmony_luni_platform_OSNetworkSystem_oneTimeInitializationImpl(JNIEnv * env, jclass clazz,
- jboolean harmony_supports_ipv6)
+JNIEXPORT void JNICALL
+Java_org_apache_harmony_luni_platform_OSNetworkSystem_oneTimeInitializationImpl
+ (JNIEnv * env, jclass clazz, jboolean harmony_supports_ipv6)
{
- jfieldID fid;
+ jfieldID fid;
jclass lookupClass;
- netInitializeIDCaches (env, harmony_supports_ipv6);
+ netInitializeIDCaches(env, harmony_supports_ipv6);
- lookupClass = (*env)->FindClass (env, "java/net/SocketImpl");
+ lookupClass = (*env)->FindClass(env, "java/net/SocketImpl");
if (!lookupClass)
return;
- fid = (*env)->GetFieldID (env, lookupClass, "address", "Ljava/net/InetAddress;");
+ fid =
+ (*env)->GetFieldID(env, lookupClass, "address", "Ljava/net/InetAddress;");
if (!fid)
return;
- HARMONY_CACHE_SET (env, FID_java_net_SocketImpl_address, fid);
+ HARMONY_CACHE_SET(env, FID_java_net_SocketImpl_address, fid);
- fid = (*env)->GetFieldID (env, lookupClass, "port", "I");
+ fid = (*env)->GetFieldID(env, lookupClass, "port", "I");
if (!fid)
return;
- HARMONY_CACHE_SET (env, FID_java_net_SocketImpl_port, fid);
-
- lookupClass = (*env)->FindClass (env, "java/net/DatagramPacket");
+ HARMONY_CACHE_SET(env, FID_java_net_SocketImpl_port, fid);
+
+ lookupClass = (*env)->FindClass(env, "java/net/DatagramPacket");
if (!lookupClass)
return;
- fid =
- (*env)->GetFieldID (env, lookupClass, "address",
- "Ljava/net/InetAddress;");
+ fid =
+ (*env)->GetFieldID(env, lookupClass, "address", "Ljava/net/InetAddress;");
if (!fid)
return;
- HARMONY_CACHE_SET (env, FID_java_net_DatagramPacket_address, fid);
+ HARMONY_CACHE_SET(env, FID_java_net_DatagramPacket_address, fid);
- fid = (*env)->GetFieldID (env, lookupClass, "length", "I");
+ fid = (*env)->GetFieldID(env, lookupClass, "length", "I");
if (!fid)
return;
- HARMONY_CACHE_SET (env, FID_java_net_DatagramPacket_length, fid);
+ HARMONY_CACHE_SET(env, FID_java_net_DatagramPacket_length, fid);
- fid = (*env)->GetFieldID (env, lookupClass, "port", "I");
+ fid = (*env)->GetFieldID(env, lookupClass, "port", "I");
if (!fid)
return;
- HARMONY_CACHE_SET (env, FID_java_net_DatagramPacket_port, fid);
+ HARMONY_CACHE_SET(env, FID_java_net_DatagramPacket_port, fid);
}
/*
@@ -345,13 +300,11 @@
* Method: createSocketImpl
* Signature: (Ljava/io/FileDescriptor;Z)V
*/
-JNIEXPORT void JNICALL Java_org_apache_harmony_luni_platform_OSNetworkSystem_createSocketImpl(JNIEnv * env,
- jclass thisClz,
- jobject thisObjFD,
- jboolean
- preferIPv4Stack)
+JNIEXPORT void JNICALL
+Java_org_apache_harmony_luni_platform_OSNetworkSystem_createSocketImpl
+ (JNIEnv * env, jclass thisClz, jobject thisObjFD, jboolean preferIPv4Stack)
{
- createSocket (env, thisObjFD, HYSOCK_STREAM, preferIPv4Stack);
+ createSocket(env, thisObjFD, HYSOCK_STREAM, preferIPv4Stack);
}
/*
@@ -359,15 +312,11 @@
* Method: createDatagramImpl
* Signature: (Ljava/io/FileDescriptor;Z)V
*/
-JNIEXPORT void JNICALL Java_org_apache_harmony_luni_platform_OSNetworkSystem_createDatagramSocketImpl(JNIEnv * env,
- jclass
- thisClz,
- jobject
- thisObjFD,
- jboolean
- preferIPv4Stack)
+JNIEXPORT void JNICALL
+Java_org_apache_harmony_luni_platform_OSNetworkSystem_createDatagramSocketImpl
+ (JNIEnv * env, jclass thisClz, jobject thisObjFD, jboolean preferIPv4Stack)
{
- createSocket (env, thisObjFD, HYSOCK_DGRAM, preferIPv4Stack);
+ createSocket(env, thisObjFD, HYSOCK_DGRAM, preferIPv4Stack);
}
/*
@@ -375,100 +324,91 @@
* Method: readSocketImpl
* Signature: (Ljava/io/FileDescriptor;[BIII)I
*/
-JNIEXPORT jint JNICALL Java_org_apache_harmony_luni_platform_OSNetworkSystem_readSocketImpl(JNIEnv * env, jclass thisClz,
- jobject fileDescriptor,
- jbyteArray data, jint offset,
- jint count, jint timeout)
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_luni_platform_OSNetworkSystem_readSocketImpl
+ (JNIEnv * env, jclass thisClz, jobject fileDescriptor, jbyteArray data,
+ jint offset, jint count, jint timeout)
{
- PORT_ACCESS_FROM_ENV (env);
- jbyte *message;
+ PORT_ACCESS_FROM_ENV(env);
+ jbyte *message;
I_32 localCount;
jint result;
/* TODO: ARRAY PINNING */
-#define INTERNAL_RECEIVE_BUFFER_MAX 2048
+#define INTERNAL_RECEIVE_BUFFER_MAX 2048
U_8 internalBuffer[INTERNAL_RECEIVE_BUFFER_MAX];
- localCount = (count < 65536) ? count : 65536;
+ localCount = (count < 65536) ? count : 65536;
- if (localCount > INTERNAL_RECEIVE_BUFFER_MAX)
- {
- message = hymem_allocate_memory (localCount);
- if (message == NULL)
- {
- throwNewOutOfMemoryError (env, "");
- return 0;
- }
- }
- else
- {
- message = (jbyte *)internalBuffer;
+ if (localCount > INTERNAL_RECEIVE_BUFFER_MAX) {
+ message = hymem_allocate_memory(localCount);
+ if (message == NULL) {
+ throwNewOutOfMemoryError(env, "");
+ return 0;
}
+ } else {
+ message = (jbyte *) internalBuffer;
+ }
- result = Java_org_apache_harmony_luni_platform_OSNetworkSystem_readSocketDirectImpl(env, thisClz, fileDescriptor,
- (jlong)message, offset, count, timeout);
+ result =
+ Java_org_apache_harmony_luni_platform_OSNetworkSystem_readSocketDirectImpl
+ (env, thisClz, fileDescriptor, (jlong) message, count, timeout);
- if (result > 0)
- (*env)->SetByteArrayRegion (env, data, offset, result, (jbyte *)message);
+ if (result > 0) {
+ (*env)->SetByteArrayRegion(env, data, offset, result, (jbyte *) message);
+ }
- if (((U_8 *)message) != internalBuffer)
- {
- hymem_free_memory ((U_8 *)message);
- }
+ if (((U_8 *) message) != internalBuffer) {
+ hymem_free_memory((U_8 *) message);
+ }
#undef INTERNAL_MAX
- return result;
+ return result;
}
/*
* Class: org_apache_harmony_luni_platform_OSNetworkSystem
* Method: readSocketDirectImpl
- * Signature: (Ljava/io/FileDescriptor;JIII)I
+ * Signature: (Ljava/io/FileDescriptor;JII)I
*/
-JNIEXPORT jint JNICALL Java_org_apache_harmony_luni_platform_OSNetworkSystem_readSocketDirectImpl(JNIEnv * env,
- jclass thisClz,
- jobject fileDescriptor,
- jlong address, jint offset,
- jint count, jint timeout)
-{
- PORT_ACCESS_FROM_ENV (env);
- hysocket_t hysocketP;
- jbyte *message = (jbyte *)address;
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_luni_platform_OSNetworkSystem_readSocketDirectImpl
+ (JNIEnv * env, jclass thisClz, jobject fileDescriptor, jlong address,
+ jint count, jint timeout)
+{
+ PORT_ACCESS_FROM_ENV(env);
+ hysocket_t hysocketP;
+ jbyte *message = (jbyte *) address;
I_32 result, localCount;
- hysocketP =getJavaIoFileDescriptorContentsAsAPointer (env, fileDescriptor);
+ hysocketP = getJavaIoFileDescriptorContentsAsAPointer(env, fileDescriptor);
/*----------------the older form,nearly the same with below------------
//result = pollSelectRead (env, fileDescriptor, timeout, TRUE);
*/
- result = selectRead (env, hysocketP, timeout * 1000, FALSE);
- if (0 >= result)
- return (jint) 0;
+ result = selectRead(env, hysocketP, timeout * 1000, FALSE);
+ if (0 >= result)
+ return (jint) 0;
- if (!hysock_socketIsValid (hysocketP))
- {
- throwJavaNetSocketException (env, HYPORT_ERROR_SOCKET_BADSOCKET);
- return (jint) 0;
- }
+ if (!hysock_socketIsValid(hysocketP)) {
+ throwJavaNetSocketException(env, HYPORT_ERROR_SOCKET_BADSOCKET);
+ return (jint) 0;
+ }
- localCount = (count < 65536) ? count : 65536;
+ localCount = (count < 65536) ? count : 65536;
- result = hysock_read (hysocketP, (U_8 *) message, localCount, HYSOCK_NOFLAGS);
-
- /* If no bytes are read, return -1 to signal 'endOfFile' to the Java input stream */
- if (0 < result)
- {
- return (jint) result;
- }
- else if (0 == result)
- {
- return (jint) - 1;
- }
- else
- {
- throwJavaNetSocketException (env, result);
- return (jint) 0;
- }
+ result =
+ hysock_read(hysocketP, (U_8 *) message, localCount, HYSOCK_NOFLAGS);
+
+ /* If no bytes are read, return -1 to signal 'endOfFile' to the Java input stream */
+ if (0 < result) {
+ return (jint) result;
+ } else if (0 == result) {
+ return (jint) - 1;
+ } else {
+ throwJavaNetSocketException(env, result);
+ return (jint) 0;
+ }
}
/*
@@ -476,45 +416,45 @@
* Method: writeSocketImpl
* Signature: (Ljava/io/FileDescriptor;[BII)I
*/
-JNIEXPORT jint JNICALL Java_org_apache_harmony_luni_platform_OSNetworkSystem_writeSocketImpl(JNIEnv * env, jclass thisClz,
- jobject fileDescriptor,
- jbyteArray data, jint offset,
- jint count)
-{
- PORT_ACCESS_FROM_ENV (env);
- jbyte *message;
- I_32 sent = 0;
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_luni_platform_OSNetworkSystem_writeSocketImpl
+ (JNIEnv * env, jclass thisClz, jobject fileDescriptor, jbyteArray data,
+ jint offset, jint count)
+{
+ PORT_ACCESS_FROM_ENV(env);
+ jbyte *message;
+ I_32 sent = 0;
jint result = 0;
/* TODO: ARRAY PINNING */
-#define INTERNAL_SEND_BUFFER_MAX 512
- U_8 internalBuffer[INTERNAL_SEND_BUFFER_MAX];
+#define INTERNAL_SEND_BUFFER_MAX 512
+ U_8 internalBuffer[INTERNAL_SEND_BUFFER_MAX];
- if (count > INTERNAL_SEND_BUFFER_MAX)
- {
- message = hymem_allocate_memory (count);
- if (message == NULL)
- {
- throwNewOutOfMemoryError (env, "");
- return 0;
- }
- }
- else
- {
- message = (jbyte *)internalBuffer;
+ if (count > INTERNAL_SEND_BUFFER_MAX) {
+ message = hymem_allocate_memory(count);
+ if (message == NULL) {
+ throwNewOutOfMemoryError(env, "");
+ return 0;
}
+ } else {
+ message = (jbyte *) internalBuffer;
+ }
- (*env)->GetByteArrayRegion (env, data, offset, count, message);
-
- result = Java_org_apache_harmony_luni_platform_OSNetworkSystem_writeSocketDirectImpl(env, thisClz,
- fileDescriptor, (jlong) message, offset, count);
-
- if ((U_8 *)message != internalBuffer)
- {
- hymem_free_memory (message);
- }
+ (*env)->GetByteArrayRegion(env, data, offset, count, message);
+ if ((*env)->ExceptionCheck(env)) {
+ goto out;
+ }
+
+ result =
+ Java_org_apache_harmony_luni_platform_OSNetworkSystem_writeSocketDirectImpl
+ (env, thisClz, fileDescriptor, (jlong) message, count);
+
+out:
+ if ((U_8 *) message != internalBuffer) {
+ hymem_free_memory(message);
+ }
#undef INTERNAL_SEND_BUFFER_MAX
- return result;
+ return result;
}
/*
@@ -522,55 +462,47 @@
* Method: writeSocketDirectImpl
* Signature: (Ljava/io/FileDescriptor;JII)I
*/
-JNIEXPORT jint JNICALL Java_org_apache_harmony_luni_platform_OSNetworkSystem_writeSocketDirectImpl(JNIEnv * env,
- jclass thisClz,
- jobject fileDescriptor,
- jlong address, jint offset,
- jint count)
-{
- PORT_ACCESS_FROM_ENV (env);
- hysocket_t socketP;
- jbyte *message = (jbyte *)address;
- I_32 result = 0, sent = 0;
-
- if(sent < count)
- {
- socketP =
- getJavaIoFileDescriptorContentsAsAPointer (env, fileDescriptor);
- if (!hysock_socketIsValid(socketP))
- {
- throwJavaNetSocketException (env,
- sent ==
- 0 ? HYPORT_ERROR_SOCKET_BADSOCKET :
- HYPORT_ERROR_SOCKET_INTERRUPTED);
- return (jint) 0;
- }
- }
-
- while (sent < count)
- {
-
- result =
- hysock_write (socketP, (U_8 *) message + sent, (I_32) count - sent,
- HYSOCK_NOFLAGS);
- if (result < 0)
- break;
- sent += result;
- }
-
- /**
- * We should always throw an exception if all the data cannot be sent because Java methods
- * assume all the data will be sent or an error occurs.
- */
- if (result < 0)
- {
- throwJavaNetSocketException (env, result);
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_luni_platform_OSNetworkSystem_writeSocketDirectImpl
+ (JNIEnv * env, jclass thisClz, jobject fileDescriptor, jlong address,
+ jint count)
+{
+ PORT_ACCESS_FROM_ENV(env);
+ hysocket_t socketP;
+ jbyte *message = (jbyte *) address;
+ I_32 result = 0, sent = 0;
+
+ if (sent < count) {
+ socketP = getJavaIoFileDescriptorContentsAsAPointer(env, fileDescriptor);
+ if (!hysock_socketIsValid(socketP)) {
+ throwJavaNetSocketException(env,
+ sent ==0 ?
+ HYPORT_ERROR_SOCKET_BADSOCKET :
+ HYPORT_ERROR_SOCKET_INTERRUPTED);
return (jint) 0;
}
- else
- {
- return (jint) sent;
+ }
+
+ while (sent < count) {
+ result =
+ hysock_write(socketP, (U_8 *) message + sent, (I_32) count - sent,
+ HYSOCK_NOFLAGS);
+ if (result < 0) {
+ break;
}
+ sent += result;
+ }
+
+ /**
+ * We should always throw an exception if all the data cannot be sent because Java methods
+ * assume all the data will be sent or an error occurs.
+ */
+ if (result < 0) {
+ throwJavaNetSocketException(env, result);
+ return (jint) 0;
+ } else {
+ return (jint) sent;
+ }
}
/*
@@ -578,231 +510,203 @@
* Method: setNonBlockingImpl
* Signature: (Ljava/io/FileDescriptor;Z)V
*/
-JNIEXPORT void JNICALL Java_org_apache_harmony_luni_platform_OSNetworkSystem_setNonBlockingImpl (JNIEnv * env,
- jclass fileDescriptor,jobject afd,
- jboolean nonblocking)
-{
- PORT_ACCESS_FROM_ENV (env);
- hysocket_t socketP;
- int result;
- socketP =getJavaIoFileDescriptorContentsAsAPointer (env, afd);
- if (!hysock_socketIsValid (socketP))
- {
- // return silently, leave validation in real I/O operation
- return ;
- }
- result = hysock_set_nonblocking(socketP,nonblocking);
- if (0 != result) {
- throwJavaNetSocketException (env, result);
- }
- return;
+JNIEXPORT void JNICALL
+Java_org_apache_harmony_luni_platform_OSNetworkSystem_setNonBlockingImpl
+ (JNIEnv * env, jclass fileDescriptor, jobject afd, jboolean nonblocking)
+{
+ PORT_ACCESS_FROM_ENV(env);
+ hysocket_t socketP;
+ int result;
+ socketP = getJavaIoFileDescriptorContentsAsAPointer(env, afd);
+ if (!hysock_socketIsValid(socketP)) {
+ // return silently, leave validation in real I/O operation
+ return;
+ }
+ result = hysock_set_nonblocking(socketP, nonblocking);
+ if (0 != result) {
+ throwJavaNetSocketException(env, result);
+ }
+ return;
}
/*
* Class: org_apache_harmony_luni_platform_OSNetworkSystem
- * Method: connectSocketImpl
+ * Method: connectSocketImpl
* Signature: (Ljava/io/FileDescriptor;ILjava/net/InetAddress;I)I
*/
-JNIEXPORT jint JNICALL Java_org_apache_harmony_luni_platform_OSNetworkSystem_connectSocketImpl(JNIEnv * env,
- jclass thisClz,
- jobject
- fileDescriptor,
- jint trafficClass,
- jobject inetAddress,
- jint remotePort
- )
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_luni_platform_OSNetworkSystem_connectSocketImpl
+ (JNIEnv * env, jclass thisClz, jobject fileDescriptor, jint trafficClass,
+ jobject inetAddress, jint remotePort)
{
- PORT_ACCESS_FROM_ENV (env);
- jbyte nAddrBytes[HYSOCK_INADDR6_LEN];
+ PORT_ACCESS_FROM_ENV(env);
+ jbyte nAddrBytes[HYSOCK_INADDR6_LEN];
int length;
U_16 nPort;
I_32 result;
hysocket_t socketP;
hysockaddr_struct sockaddrP;
- U_32 scope_id = 0;
+ U_32 scope_id = 0;
- socketP = getJavaIoFileDescriptorContentsAsAPointer (env, fileDescriptor);
- if (!hysock_socketIsValid (socketP))
- {
- throwJavaNetSocketException (env, HYPORT_ERROR_SOCKET_BADSOCKET);
- return -1;
- }
- else
- {
- netGetJavaNetInetAddressValue (env, inetAddress, (U_8 *)nAddrBytes, (U_32 *)&length);
-
- nPort = hysock_htons ((U_16) remotePort);
- if (length == HYSOCK_INADDR_LEN)
- {
- hysock_sockaddr_init6 (&sockaddrP, (U_8 *) nAddrBytes, length,
- HYADDR_FAMILY_AFINET4, nPort, 0, scope_id,
- socketP);
- }
- else
- {
- netGetJavaNetInetAddressScopeId (env, inetAddress, &scope_id);
- hysock_sockaddr_init6 (&sockaddrP, (U_8 *) nAddrBytes, length,
- HYADDR_FAMILY_AFINET6, nPort,
- (trafficClass & 0xFF) << 20, scope_id,
- socketP);
- }
-
- result = hysock_connect (socketP, &sockaddrP);
- if (0 != result)
- {
- throwJavaNetConnectException (env, result);
- return result;
- }
+ socketP = getJavaIoFileDescriptorContentsAsAPointer(env, fileDescriptor);
+ if (!hysock_socketIsValid(socketP)) {
+ throwJavaNetSocketException(env, HYPORT_ERROR_SOCKET_BADSOCKET);
+ return -1;
+ } else {
+ netGetJavaNetInetAddressValue(env, inetAddress, (U_8 *) nAddrBytes,
+ (U_32 *) & length);
+
+ nPort = hysock_htons((U_16) remotePort);
+ if (length == HYSOCK_INADDR_LEN) {
+ hysock_sockaddr_init6(&sockaddrP, (U_8 *) nAddrBytes, length,
+ HYADDR_FAMILY_AFINET4, nPort, 0, scope_id,
+ socketP);
+ } else {
+ netGetJavaNetInetAddressScopeId(env, inetAddress, &scope_id);
+ hysock_sockaddr_init6(&sockaddrP, (U_8 *) nAddrBytes, length,
+ HYADDR_FAMILY_AFINET6, nPort,
+ (trafficClass & 0xFF) << 20, scope_id, socketP);
+ }
+
+ result = hysock_connect(socketP, &sockaddrP);
+ if (0 != result) {
+ throwJavaNetConnectException(env, result);
+ return result;
}
- return result;
+ }
+ return result;
}
+
/*
* Class: org_apache_harmony_luni_platform_OSNetworkSystem
* Method: connectWithTimeoutSocketImpl
* Signature: (Ljava/io/FileDescriptor;IILjava/net/InetAddress;IILjava/lang/Long;)I
*/
-JNIEXPORT jint JNICALL Java_org_apache_harmony_luni_platform_OSNetworkSystem_connectWithTimeoutSocketImpl(JNIEnv * env,
- jclass thisClz,
- jobject
- fileDescriptor,
- jint timeout,
- jint trafficClass,
- jobject inetAddr,
- jint port,
- jint step,
- jobject passContext)
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_luni_platform_OSNetworkSystem_connectWithTimeoutSocketImpl
+ (JNIEnv * env, jclass thisClz, jobject fileDescriptor, jint timeout,
+ jint trafficClass, jobject inetAddr, jint port, jint step,
+ jobject passContext)
{
- PORT_ACCESS_FROM_ENV (env);
- jbyte nAddrBytes[HYSOCK_INADDR6_LEN];
+ PORT_ACCESS_FROM_ENV(env);
+ jbyte nAddrBytes[HYSOCK_INADDR6_LEN];
hysocket_t socketP;
- /*former:jbyte * nAddrBytes; */
- int length ;
+ /*former:jbyte * nAddrBytes; */
+ int length;
U_16 nPort;
- I_32 result = 0;
+ I_32 result = 0;
hysockaddr_struct sockaddrP;
- U_32 scope_id = 0;
- U_8 * context = NULL;
- context = getConnectContext(env,passContext);
-
- socketP = getJavaIoFileDescriptorContentsAsAPointer (env, fileDescriptor);
-
- if (!hysock_socketIsValid (socketP))
- {
- throwJavaNetSocketException (env, HYPORT_ERROR_SOCKET_BADSOCKET);
- return -1;
- }
- else
- {
+ U_32 scope_id = 0;
+ U_8 *context = NULL;
+ context = getConnectContext(env, passContext);
+
+ socketP = getJavaIoFileDescriptorContentsAsAPointer(env, fileDescriptor);
+
+ if (!hysock_socketIsValid(socketP)) {
+ throwJavaNetSocketException(env, HYPORT_ERROR_SOCKET_BADSOCKET);
+ return -1;
+ } else {
/*----------------------- former -----------------------------
- //jbyteArray byte_array = getInetAddrIP(env,inteAddr);
- //length = (*env)->GetArrayLength (env, byte_array);
- //(*env)->GetByteArrayRegion (env, byte_array, 0, length, nAddrBytes);
+ //jbyteArray byte_array = getInetAddrIP(env,inteAddr);
+ //length = (*env)->GetArrayLength (env, byte_array);
+ //(*env)->GetByteArrayRegion (env, byte_array, 0, length, nAddrBytes);
*/
- netGetJavaNetInetAddressValue (env, inetAddr, (U_8 *)nAddrBytes, (U_32 *)&length);
- nPort = hysock_htons ((U_16) port);
- hysock_sockaddr_init6 (&sockaddrP,(U_8 *) nAddrBytes, length,
- HYADDR_FAMILY_AFINET4, nPort, 0, scope_id,
- socketP);
-
- switch (step){
- case SOCKET_CONNECT_STEP_START:
- result = hysock_connect_with_timeout (socketP, &sockaddrP,0, HY_PORT_SOCKET_STEP_START,&context);
- break;
- case SOCKET_CONNECT_STEP_CHECK:
-
- result = hysock_connect_with_timeout (socketP, &sockaddrP,timeout, HY_PORT_SOCKET_STEP_CHECK,&context);
- break;
- }
-
- /* set connext for next call*/
- setConnectContext(env,passContext,context);
-
- if (0 == result)
- {
- /* connected , so stop here */
- hysock_connect_with_timeout (socketP, &sockaddrP, 0,
- HY_PORT_SOCKET_STEP_DONE, &context);
- }
- else if (result != HYPORT_ERROR_SOCKET_NOTCONNECTED)
- {
- /* can not connect... */
- if ((HYPORT_ERROR_SOCKET_CONNRESET == result) ||
- (HYPORT_ERROR_SOCKET_CONNECTION_REFUSED == result) ||
- (HYPORT_ERROR_SOCKET_ADDRNOTAVAIL == result) ||
- (HYPORT_ERROR_SOCKET_ADDRINUSE == result) ||
- (HYPORT_ERROR_SOCKET_ENETUNREACH == result) ||
- (HYPORT_ERROR_SOCKET_EACCES == result))
- {
- // This wasn't commented out on win.IA32 but I don't
- // see why it shouldn't be the same on both platforms
- //hysock_connect_with_timeout (socketP, &sockaddrP,
- //0,HY_PORT_SOCKET_STEP_DONE,
- //&context);
- throwJavaNetConnectException (env, result);
- }
- else
- {
- hysock_connect_with_timeout (socketP, &sockaddrP, 0,
- HY_PORT_SOCKET_STEP_DONE,
- &context);
- throwJavaNetSocketException (env, result);
- }
- }
+ netGetJavaNetInetAddressValue(env, inetAddr, (U_8 *) nAddrBytes,
+ (U_32 *) & length);
+ nPort = hysock_htons((U_16) port);
+ hysock_sockaddr_init6(&sockaddrP, (U_8 *) nAddrBytes, length,
+ HYADDR_FAMILY_AFINET4, nPort, 0, scope_id, socketP);
+
+ switch (step) {
+ case SOCKET_CONNECT_STEP_START:
+ result =
+ hysock_connect_with_timeout(socketP, &sockaddrP, 0,
+ HY_PORT_SOCKET_STEP_START, &context);
+ break;
+ case SOCKET_CONNECT_STEP_CHECK:
+
+ result =
+ hysock_connect_with_timeout(socketP, &sockaddrP, timeout,
+ HY_PORT_SOCKET_STEP_CHECK, &context);
+ break;
+ }
+
+ /* set connext for next call */
+ setConnectContext(env, passContext, context);
+
+ if (0 == result) {
+ /* connected , so stop here */
+ hysock_connect_with_timeout(socketP, &sockaddrP, 0,
+ HY_PORT_SOCKET_STEP_DONE, &context);
+ } else if (result != HYPORT_ERROR_SOCKET_NOTCONNECTED) {
+ /* can not connect... */
+ if ((HYPORT_ERROR_SOCKET_CONNRESET == result) ||
+ (HYPORT_ERROR_SOCKET_CONNECTION_REFUSED == result) ||
+ (HYPORT_ERROR_SOCKET_ADDRNOTAVAIL == result) ||
+ (HYPORT_ERROR_SOCKET_ADDRINUSE == result) ||
+ (HYPORT_ERROR_SOCKET_ENETUNREACH == result) ||
+ (HYPORT_ERROR_SOCKET_EACCES == result)) {
+ // This wasn't commented out on win.IA32 but I don't
+ // see why it shouldn't be the same on both platforms
+ //hysock_connect_with_timeout (socketP, &sockaddrP,
+ //0,HY_PORT_SOCKET_STEP_DONE,
+ //&context);
+ throwJavaNetConnectException(env, result);
+ } else {
+ hysock_connect_with_timeout(socketP, &sockaddrP, 0,
+ HY_PORT_SOCKET_STEP_DONE, &context);
+ throwJavaNetSocketException(env, result);
+ }
}
+ }
- return result;
+ return result;
}
+
/*
* Class: org_apache_harmony_luni_platform_OSNetworkSystem
* Method: socketBindImpl
* Signature: (Ljava/io/FileDescriptor;ILjava/net/InetAddress;)V
*/
-JNIEXPORT void JNICALL Java_org_apache_harmony_luni_platform_OSNetworkSystem_socketBindImpl(JNIEnv * env, jclass thisClz,
- jobject fileDescriptor,
- jint localPort,
- jobject inetAddress)
+JNIEXPORT void JNICALL
+Java_org_apache_harmony_luni_platform_OSNetworkSystem_socketBindImpl
+ (JNIEnv * env, jclass thisClz, jobject fileDescriptor,
+ jint localPort, jobject inetAddress)
{
- PORT_ACCESS_FROM_ENV (env);
- jbyte nlocalAddrBytes[HYSOCK_INADDR6_LEN];
+ PORT_ACCESS_FROM_ENV(env);
+ jbyte nlocalAddrBytes[HYSOCK_INADDR6_LEN];
int length;
U_16 nPort;
I_32 result;
hysocket_t socketP;
hysockaddr_struct sockaddrP;
- U_32 scope_id = 0;
+ U_32 scope_id = 0;
- socketP = getJavaIoFileDescriptorContentsAsAPointer (env, fileDescriptor);
- if (!hysock_socketIsValid (socketP))
- {
- throwJavaNetSocketException (env, HYPORT_ERROR_SOCKET_BADSOCKET);
+ socketP = getJavaIoFileDescriptorContentsAsAPointer(env, fileDescriptor);
+ if (!hysock_socketIsValid(socketP)) {
+ throwJavaNetSocketException(env, HYPORT_ERROR_SOCKET_BADSOCKET);
+ return;
+ } else {
+ netGetJavaNetInetAddressValue(env, inetAddress, (U_8 *) nlocalAddrBytes,
+ (U_32 *) & length);
+
+ nPort = hysock_htons((U_16) localPort);
+ if (length == HYSOCK_INADDR6_LEN) {
+ netGetJavaNetInetAddressScopeId(env, inetAddress, &scope_id);
+ hysock_sockaddr_init6(&sockaddrP, (U_8 *) nlocalAddrBytes, length,
+ HYADDR_FAMILY_AFINET6, nPort, 0, scope_id,
+ socketP);
+ } else {
+ hysock_sockaddr_init6(&sockaddrP, (U_8 *) nlocalAddrBytes, length,
+ HYADDR_FAMILY_AFINET4, nPort, 0, scope_id,
+ socketP);
+ }
+ result = hysock_bind(socketP, &sockaddrP);
+ if (0 != result) {
+ throwJavaNetBindException(env, result);
return;
}
- else
- {
- netGetJavaNetInetAddressValue (env, inetAddress, (U_8 *)nlocalAddrBytes,
- (U_32 *)&length);
-
- nPort = hysock_htons ((U_16) localPort);
- if (length == HYSOCK_INADDR6_LEN)
- {
- netGetJavaNetInetAddressScopeId (env, inetAddress, &scope_id);
- hysock_sockaddr_init6 (&sockaddrP, (U_8 *)nlocalAddrBytes, length,
- HYADDR_FAMILY_AFINET6, nPort, 0, scope_id,
- socketP);
- }
- else
- {
- hysock_sockaddr_init6 (&sockaddrP, (U_8 *)nlocalAddrBytes, length,
- HYADDR_FAMILY_AFINET4, nPort, 0, scope_id,
- socketP);
- }
- result = hysock_bind (socketP, &sockaddrP);
- if (0 != result)
- {
- throwJavaNetBindException (env, result);
- return;
- }
- }
+ }
}
@@ -811,154 +715,139 @@
* Method: listenStreamSocketImpl
* Signature: (Ljava/io/FileDescriptor;I)V
*/
-JNIEXPORT void JNICALL Java_org_apache_harmony_luni_platform_OSNetworkSystem_listenStreamSocketImpl(JNIEnv * env, jclass thisClz,
- jobject fileDescriptor,
- jint backlog)
+JNIEXPORT void JNICALL
+Java_org_apache_harmony_luni_platform_OSNetworkSystem_listenStreamSocketImpl
+ (JNIEnv * env, jclass thisClz, jobject fileDescriptor, jint backlog)
{
- PORT_ACCESS_FROM_ENV (env);
+ PORT_ACCESS_FROM_ENV(env);
hysocket_t socketP;
I_32 result;
- socketP = getJavaIoFileDescriptorContentsAsAPointer (env, fileDescriptor);
- if (!hysock_socketIsValid (socketP))
- {
- throwJavaNetSocketException (env, HYPORT_ERROR_SOCKET_BADSOCKET);
- return;
- }
- else
- {
- result = hysock_listen (socketP, (I_32) backlog);
- if (result < 0)
- {
- throwJavaNetSocketException (env, result);
- }
+ socketP = getJavaIoFileDescriptorContentsAsAPointer(env, fileDescriptor);
+ if (!hysock_socketIsValid(socketP)) {
+ throwJavaNetSocketException(env, HYPORT_ERROR_SOCKET_BADSOCKET);
+ return;
+ } else {
+ result = hysock_listen(socketP, (I_32) backlog);
+ if (result < 0) {
+ throwJavaNetSocketException(env, result);
}
+ }
}
+
/*
* Class: org_apache_harmony_luni_platform_OSNetworkSystem
* Method: availableStreamImpl
* Signature: (Ljava/io/FileDescriptor;)I
*/
-JNIEXPORT jint JNICALL Java_org_apache_harmony_luni_platform_OSNetworkSystem_availableStreamImpl(JNIEnv * env, jclass thisClz,
- jobject fileDescriptor)
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_luni_platform_OSNetworkSystem_availableStreamImpl
+ (JNIEnv * env, jclass thisClz, jobject fileDescriptor)
{
-#define MSGLEN 2048 /* This could be replaced by the default stack buffer size */
- PORT_ACCESS_FROM_ENV (env);
- hysocket_t hysocketP;
- char message[MSGLEN];
+#define MSGLEN 2048 /* This could be replaced by the default stack buffer size */
+ PORT_ACCESS_FROM_ENV(env);
+ hysocket_t hysocketP;
+ char message[MSGLEN];
I_32 result, flags = 0;
I_32 loopFlag = 1;
-
- hysocketP = getJavaIoFileDescriptorContentsAsAPointer (env, fileDescriptor);
- if (!hysock_socketIsValid (hysocketP))
- {
- throwJavaNetSocketException (env, HYPORT_ERROR_SOCKET_BADSOCKET);
- return (jint) 0;
- }
+
+ hysocketP = getJavaIoFileDescriptorContentsAsAPointer(env, fileDescriptor);
+ if (!hysock_socketIsValid(hysocketP)) {
+ throwJavaNetSocketException(env, HYPORT_ERROR_SOCKET_BADSOCKET);
+ return (jint) 0;
+ }
do {
- result = hysock_select_read (hysocketP, 0, 1, FALSE);
+ result = hysock_select_read(hysocketP, 0, 1, FALSE);
- if (HYPORT_ERROR_SOCKET_TIMEOUT == result)
- {
- return (jint) 0; /* The read operation timed out, so answer 0 bytes available */
- }
- else if (HYPORT_ERROR_SOCKET_INTERRUPTED == result) {
- continue;
- }
- else if (0 > result)
- {
- throwJavaNetSocketException (env, result);
- return (jint) 0;
- }
- } while (HYPORT_ERROR_SOCKET_INTERRUPTED == result);
-
- result = hysock_setflag (HYSOCK_MSG_PEEK, &flags); /* Create a 'peek' flag argument for the read operation */
- if (0 > result)
- {
- throwJavaNetSocketException (env, result);
+ if (HYPORT_ERROR_SOCKET_TIMEOUT == result) {
+ return (jint) 0; /* The read operation timed out, so answer 0 bytes available */
+ } else if (HYPORT_ERROR_SOCKET_INTERRUPTED == result) {
+ continue;
+ } else if (0 > result) {
+ throwJavaNetSocketException(env, result);
return (jint) 0;
}
+ } while (HYPORT_ERROR_SOCKET_INTERRUPTED == result);
+
+ result = hysock_setflag(HYSOCK_MSG_PEEK, &flags); /* Create a 'peek' flag argument for the read operation */
+ if (0 > result) {
+ throwJavaNetSocketException(env, result);
+ return (jint) 0;
+ }
- result = hysock_read (hysocketP, (U_8 *) message, MSGLEN, flags);
+ result = hysock_read(hysocketP, (U_8 *) message, MSGLEN, flags);
- if (0 > result)
- {
- throwJavaNetSocketException (env, result);
- return (jint) 0;
- }
- else
- {
- return (jint) result;
- }
+ if (0 > result) {
+ throwJavaNetSocketException(env, result);
+ return (jint) 0;
+ } else {
+ return (jint) result;
+ }
}
+
/*
* Class: org_apache_harmony_luni_platform_OSNetworkSystem
* Method: acceptSocketImpl
- * Signature: (Ljava/io/FileDescriptor;Ljava/net/SocketImpl;Ljava/io/FileDescriptor;I)V
+ * Signature: (Ljava/io/FileDescriptor;Ljava/net/SocketImpl;Ljava/io/FileDescriptor;I)V
*/
-JNIEXPORT void JNICALL Java_org_apache_harmony_luni_platform_OSNetworkSystem_acceptSocketImpl(JNIEnv * env, jclass thisClz,
- jobject fileDescriptorServer,
- jobject socketImpl,
- jobject
- fileDescriptorSocketImpl,
- jint timeout)
+JNIEXPORT void JNICALL
+Java_org_apache_harmony_luni_platform_OSNetworkSystem_acceptSocketImpl
+ (JNIEnv * env, jclass thisClz, jobject fileDescriptorServer,
+ jobject socketImpl, jobject fileDescriptorSocketImpl, jint timeout)
{
- PORT_ACCESS_FROM_ENV (env);
+ PORT_ACCESS_FROM_ENV(env);
I_32 result;
hysocket_t socketS, socketNew;
hysockaddr_struct sockaddrP;
- jbyte nlocalAddrBytes[HYSOCK_INADDR6_LEN];
+ jbyte nlocalAddrBytes[HYSOCK_INADDR6_LEN];
-
- result = pollSelectRead (env, fileDescriptorServer, timeout, TRUE);
+ result = pollSelectRead(env, fileDescriptorServer, timeout, TRUE);
- if (0 > result)
+ if (0 > result) {
return;
+ }
socketS =
- getJavaIoFileDescriptorContentsAsAPointer (env, fileDescriptorServer);
- if (!hysock_socketIsValid (socketS))
- {
- throwJavaNetSocketException (env, HYPORT_ERROR_SOCKET_BADSOCKET);
- return;
- }
+ getJavaIoFileDescriptorContentsAsAPointer(env, fileDescriptorServer);
+ if (!hysock_socketIsValid(socketS)) {
+ throwJavaNetSocketException(env, HYPORT_ERROR_SOCKET_BADSOCKET);
+ return;
+ }
- hysock_sockaddr_init6 (&sockaddrP, (U_8 *) nlocalAddrBytes,
- HYSOCK_INADDR_LEN, HYADDR_FAMILY_AFINET4, 0, 0, 0,
- socketS);
-
- result = hysock_accept (socketS, &sockaddrP, &socketNew);
- if (0 != result)
- {
- throwJavaNetBindException (env, result);
- }
- else
- {
- updateSocket (env, &sockaddrP, socketNew, socketImpl,
- fileDescriptorSocketImpl);
- }
+ hysock_sockaddr_init6(&sockaddrP, (U_8 *) nlocalAddrBytes,
+ HYSOCK_INADDR_LEN, HYADDR_FAMILY_AFINET4, 0, 0, 0,
+ socketS);
+
+ result = hysock_accept(socketS, &sockaddrP, &socketNew);
+ if (0 != result) {
+ throwJavaNetBindException(env, result);
+ } else {
+ updateSocket(env, &sockaddrP, socketNew, socketImpl,
+ fileDescriptorSocketImpl);
+ }
}
+
/*
* Class: org_apache_harmony_luni_platform_OSNetworkSystem
* Method: supportsUrgentDataImpl
* Signature: (Ljava/io/FileDescriptor;)Z
*/
-JNIEXPORT jboolean JNICALL Java_org_apache_harmony_luni_platform_OSNetworkSystem_supportsUrgentDataImpl(JNIEnv * env, jclass thisClz,
- jobject fileDescriptor)
+JNIEXPORT jboolean JNICALL
+Java_org_apache_harmony_luni_platform_OSNetworkSystem_supportsUrgentDataImpl
+ (JNIEnv * env, jclass thisClz, jobject fileDescriptor)
{
- PORT_ACCESS_FROM_ENV (env);
+ PORT_ACCESS_FROM_ENV(env);
hysocket_t socketP;
I_32 flags = 0;
I_32 result;
- socketP = getJavaIoFileDescriptorContentsAsAPointer (env, fileDescriptor);
- if (!hysock_socketIsValid (socketP))
- {
- return FALSE;
- }
- result = hysock_setflag (HYSOCK_MSG_OOB, &flags);
+ socketP = getJavaIoFileDescriptorContentsAsAPointer(env, fileDescriptor);
+ if (!hysock_socketIsValid(socketP)) {
+ return FALSE;
+ }
+ result = hysock_setflag(HYSOCK_MSG_OOB, &flags);
return !result;
}
@@ -967,88 +856,77 @@
* Method: sendUrgentDataImpl
* Signature: (Ljava/io/FileDescriptor;B)Z
*/
-JNIEXPORT void JNICALL Java_org_apache_harmony_luni_platform_OSNetworkSystem_sendUrgentDataImpl(JNIEnv * env, jclass thisClz,
- jobject fileDescriptor,
- jbyte data)
+JNIEXPORT void JNICALL
+Java_org_apache_harmony_luni_platform_OSNetworkSystem_sendUrgentDataImpl
+ (JNIEnv * env, jclass thisClz, jobject fileDescriptor, jbyte data)
{
- PORT_ACCESS_FROM_ENV (env);
+ PORT_ACCESS_FROM_ENV(env);
hysocket_t socketP;
I_32 flags = 0;
- I_32 result = 0;
+ I_32 result = 0;
- socketP = getJavaIoFileDescriptorContentsAsAPointer (env, fileDescriptor);
- if (!hysock_socketIsValid (socketP))
- {
- throwJavaNetSocketException (env, HYPORT_ERROR_SOCKET_BADSOCKET);
- return;
- }
- result = hysock_setflag (HYSOCK_MSG_OOB, &flags);
- if (!result)
- {
- result = hysock_write (socketP, (U_8 *)&data, 1, flags);
- }
+ socketP = getJavaIoFileDescriptorContentsAsAPointer(env, fileDescriptor);
+ if (!hysock_socketIsValid(socketP)) {
+ throwJavaNetSocketException(env, HYPORT_ERROR_SOCKET_BADSOCKET);
+ return;
+ }
+ result = hysock_setflag(HYSOCK_MSG_OOB, &flags);
+ if (!result) {
+ result = hysock_write(socketP, (U_8 *) & data, 1, flags);
+ }
/* Always throw an exception if all the data cannot be sent because Java methods
- * assume all the data will be sent or an error occurs.
+ * assume all the data will be sent or an error occurs.
*/
- if (result < 0)
- {
- throwJavaNetSocketException (env, result);
- }
+ if (result < 0) {
+ throwJavaNetSocketException(env, result);
+ }
}
+
/*
* Class: org_apache_harmony_luni_platform_OSNetworkSystem
* Method: connectDatagramImpl2
* Signature: (Ljava/io/FileDescriptor;IILjava/net/InetAddress;)V
*/
-JNIEXPORT void JNICALL Java_org_apache_harmony_luni_platform_OSNetworkSystem_connectDatagramImpl2(JNIEnv * env,
- jclass thisClz,
- jobject
- fileDescriptor,
- jint remotePort,
- jint trafficClass,
- jobject
- inetAddress)
+JNIEXPORT void JNICALL
+Java_org_apache_harmony_luni_platform_OSNetworkSystem_connectDatagramImpl2
+ (JNIEnv * env, jclass thisClz, jobject fileDescriptor, jint remotePort,
+ jint trafficClass, jobject inetAddress)
{
- PORT_ACCESS_FROM_ENV (env);
- jbyte nAddrBytes[HYSOCK_INADDR6_LEN];
+ PORT_ACCESS_FROM_ENV(env);
+ jbyte nAddrBytes[HYSOCK_INADDR6_LEN];
int length;
U_16 nPort;
I_32 result;
hysocket_t socketP;
hysockaddr_struct sockaddrP;
- U_32 scope_id = 0;
+ U_32 scope_id = 0;
- socketP = getJavaIoFileDescriptorContentsAsAPointer (env, fileDescriptor);
- if (!hysock_socketIsValid (socketP))
- {
- throwJavaNetSocketException (env, HYPORT_ERROR_SOCKET_BADSOCKET);
- return;
- }
+ socketP = getJavaIoFileDescriptorContentsAsAPointer(env, fileDescriptor);
+ if (!hysock_socketIsValid(socketP)) {
+ throwJavaNetSocketException(env, HYPORT_ERROR_SOCKET_BADSOCKET);
+ return;
+ }
- netGetJavaNetInetAddressValue (env, inetAddress, (U_8 *)nAddrBytes, (U_32 *)&length);
+ netGetJavaNetInetAddressValue(env, inetAddress, (U_8 *) nAddrBytes,
+ (U_32 *) & length);
- nPort = hysock_htons ((U_16) remotePort);
- if (length == HYSOCK_INADDR_LEN)
- {
- hysock_sockaddr_init6 (&sockaddrP, (U_8 *) nAddrBytes, length,
- HYADDR_FAMILY_AFINET4, nPort, 0, 0, socketP);
- }
- else
- {
- netGetJavaNetInetAddressScopeId (env, inetAddress, &scope_id);
- hysock_sockaddr_init6 (&sockaddrP, (U_8 *) nAddrBytes, length,
- HYADDR_FAMILY_AFINET6, nPort,
- (trafficClass & 0xFF) << 20, scope_id, socketP);
- }
-
- result = hysock_connect (socketP, &sockaddrP);
- if (0 != result)
- {
- throwJavaNetConnectException (env, result);
+ nPort = hysock_htons((U_16) remotePort);
+ if (length == HYSOCK_INADDR_LEN) {
+ hysock_sockaddr_init6(&sockaddrP, (U_8 *) nAddrBytes, length,
+ HYADDR_FAMILY_AFINET4, nPort, 0, 0, socketP);
+ } else {
+ netGetJavaNetInetAddressScopeId(env, inetAddress, &scope_id);
+ hysock_sockaddr_init6(&sockaddrP, (U_8 *) nAddrBytes, length,
+ HYADDR_FAMILY_AFINET6, nPort,
+ (trafficClass & 0xFF) << 20, scope_id, socketP);
+ }
- return;
- }
+ result = hysock_connect(socketP, &sockaddrP);
+ if (0 != result) {
+ throwJavaNetConnectException(env, result);
+ return;
+ }
}
/*
@@ -1056,40 +934,37 @@
* Method: disconnectDatagramImpl
* Signature: (Ljava/io/FileDescriptor;)V
*/
-JNIEXPORT void JNICALL Java_org_apache_harmony_luni_platform_OSNetworkSystem_disconnectDatagramImpl(JNIEnv * env,
- jclass thisClz,
- jobject
- fileDescriptor)
+JNIEXPORT void JNICALL
+Java_org_apache_harmony_luni_platform_OSNetworkSystem_disconnectDatagramImpl
+ (JNIEnv * env, jclass thisClz, jobject fileDescriptor)
{
- PORT_ACCESS_FROM_ENV (env);
- jbyte nAddrBytes[HYSOCK_INADDR6_LEN];
+ PORT_ACCESS_FROM_ENV(env);
+ jbyte nAddrBytes[HYSOCK_INADDR6_LEN];
U_16 nPort = 0;
I_32 result;
hysocket_t socketP;
hysockaddr_struct sockaddrP;
- socketP = getJavaIoFileDescriptorContentsAsAPointer (env, fileDescriptor);
- if (!hysock_socketIsValid (socketP))
- {
- throwJavaNetSocketException (env, HYPORT_ERROR_SOCKET_BADSOCKET);
- return;
- }
+ socketP = getJavaIoFileDescriptorContentsAsAPointer(env, fileDescriptor);
+ if (!hysock_socketIsValid(socketP)) {
+ throwJavaNetSocketException(env, HYPORT_ERROR_SOCKET_BADSOCKET);
+ return;
+ }
- /* the address itself should not matter as the protocol family is AF_UNSPEC. This tells connect to
- disconnect the Datagram */
- memset (nAddrBytes, 0, HYSOCK_INADDR6_LEN);
- hysock_sockaddr_init6 (&sockaddrP, (U_8 *) nAddrBytes, HYSOCK_INADDR_LEN,
- HYADDR_FAMILY_UNSPEC, nPort, 0, 0, socketP);
-
- /* there is the possiblity of an exception here */
- result = hysock_connect (socketP, &sockaddrP);
-
- /* will likely need to eat the correct exception here. Leave as is until we figure out what that exception will be */
- if (0 != result)
- {
- throwJavaNetSocketException (env, result);
- return;
- }
+ /* the address itself should not matter as the protocol family is AF_UNSPEC. This tells connect to
+ disconnect the Datagram */
+ memset(nAddrBytes, 0, HYSOCK_INADDR6_LEN);
+ hysock_sockaddr_init6(&sockaddrP, (U_8 *) nAddrBytes, HYSOCK_INADDR_LEN,
+ HYADDR_FAMILY_UNSPEC, nPort, 0, 0, socketP);
+
+ /* there is the possiblity of an exception here */
+ result = hysock_connect(socketP, &sockaddrP);
+
+ /* will likely need to eat the correct exception here. Leave as is until we figure out what that exception will be */
+ if (0 != result) {
+ throwJavaNetSocketException(env, result);
+ return;
+ }
}
@@ -1098,14 +973,12 @@
* Method: socketBindImpl2
* Signature: (Ljava/io/FileDescriptor;IZLjava/net/InetAddress;)Z
*/
-JNIEXPORT jboolean JNICALL Java_org_apache_harmony_luni_platform_OSNetworkSystem_socketBindImpl2(JNIEnv * env,
- jclass thisClz,
- jobject fileDescriptor,
- jint localPort,
- jboolean doDevice,
- jobject inetAddress)
- {
- PORT_ACCESS_FROM_ENV (env);
+JNIEXPORT jboolean JNICALL
+Java_org_apache_harmony_luni_platform_OSNetworkSystem_socketBindImpl2
+ (JNIEnv * env, jclass thisClz, jobject fileDescriptor, jint localPort,
+ jboolean doDevice, jobject inetAddress)
+{
+ PORT_ACCESS_FROM_ENV(env);
jbyte nlocalAddrBytes[HYSOCK_INADDR6_LEN];
int length;
U_16 nPort;
@@ -1116,36 +989,29 @@
/* This method still needs work for IPv6 support */
- socketP = getJavaIoFileDescriptorContentsAsAPointer (env, fileDescriptor);
- if (!hysock_socketIsValid (socketP))
- {
- throwJavaNetSocketException (env, HYPORT_ERROR_SOCKET_BADSOCKET);
- return 0;
- }
+ socketP = getJavaIoFileDescriptorContentsAsAPointer(env, fileDescriptor);
+ if (!hysock_socketIsValid(socketP)) {
+ throwJavaNetSocketException(env, HYPORT_ERROR_SOCKET_BADSOCKET);
+ return 0;
+ }
- netGetJavaNetInetAddressValue (env, inetAddress, (U_8 *)nlocalAddrBytes,
- (U_32 *)&length);
+ netGetJavaNetInetAddressValue(env, inetAddress, (U_8 *) nlocalAddrBytes,
+ (U_32 *) & length);
- nPort = hysock_htons ((U_16) localPort);
- if (length == HYSOCK_INADDR6_LEN)
- {
- netGetJavaNetInetAddressScopeId (env, inetAddress, &scope_id);
- hysock_sockaddr_init6 (&sockaddrP, (U_8 *)nlocalAddrBytes, length,
- HYADDR_FAMILY_AFINET6, nPort, 0, scope_id,
- socketP);
- }
- else
- {
- hysock_sockaddr_init6 (&sockaddrP, (U_8 *)nlocalAddrBytes, length,
- HYADDR_FAMILY_AFINET4, nPort, 0, scope_id,
- socketP);
- }
- result = hysock_bind (socketP, &sockaddrP);
- if (0 != result)
- {
- throwJavaNetBindException (env, result);
- return 0;
- }
+ nPort = hysock_htons((U_16) localPort);
+ if (length == HYSOCK_INADDR6_LEN) {
+ netGetJavaNetInetAddressScopeId(env, inetAddress, &scope_id);
+ hysock_sockaddr_init6(&sockaddrP, (U_8 *) nlocalAddrBytes, length,
+ HYADDR_FAMILY_AFINET6, nPort, 0, scope_id, socketP);
+ } else {
+ hysock_sockaddr_init6(&sockaddrP, (U_8 *) nlocalAddrBytes, length,
+ HYADDR_FAMILY_AFINET4, nPort, 0, scope_id, socketP);
+ }
+ result = hysock_bind(socketP, &sockaddrP);
+ if (0 != result) {
+ throwJavaNetBindException(env, result);
+ return 0;
+ }
/* TOFIX: This matches the windows behaviour but it doesn't look right
result must be zero so the return code is zero from all paths.
@@ -1159,60 +1025,53 @@
* Method: peekDatagramImpl
* Signature: (Ljava/io/FileDescriptor;Ljava/net/InetAddress;I)I
*/
-JNIEXPORT jint JNICALL Java_org_apache_harmony_luni_platform_OSNetworkSystem_peekDatagramImpl(JNIEnv * env,
- jclass thisClz,
- jobject
- fileDescriptor,
- jobject senderAddress,
- jint timeout)
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_luni_platform_OSNetworkSystem_peekDatagramImpl
+ (JNIEnv * env, jclass thisClz, jobject fileDescriptor,
+ jobject senderAddress, jint timeout)
{
- PORT_ACCESS_FROM_ENV (env);
- hysocket_t hysocketP;
+ PORT_ACCESS_FROM_ENV(env);
+ hysocket_t hysocketP;
hysockaddr_struct sockaddrP;
- char msg[1] = { 0 };
- I_32 msgLen = 1;
+ char msg[1] = { 0 };
+ I_32 msgLen = 1;
I_32 result;
I_32 flags = 0;
jint hport;
- jbyte nlocalAddrBytes[HYSOCK_INADDR6_LEN];
+ jbyte nlocalAddrBytes[HYSOCK_INADDR6_LEN];
- result = pollSelectRead (env, fileDescriptor, timeout, TRUE);
- if (0 > result)
+ result = pollSelectRead(env, fileDescriptor, timeout, TRUE);
+ if (0 > result) {
return (jint) 0;
+ }
- hysocketP = getJavaIoFileDescriptorContentsAsAPointer (env, fileDescriptor);
- if (!hysock_socketIsValid (hysocketP))
- {
- throwJavaNetSocketException (env, HYPORT_ERROR_SOCKET_BADSOCKET);
- return (jint) 0;
- }
+ hysocketP = getJavaIoFileDescriptorContentsAsAPointer(env, fileDescriptor);
+ if (!hysock_socketIsValid(hysocketP)) {
+ throwJavaNetSocketException(env, HYPORT_ERROR_SOCKET_BADSOCKET);
+ return (jint) 0;
+ }
- hysock_sockaddr_init6 (&sockaddrP, (U_8 *) nlocalAddrBytes,
- HYSOCK_INADDR_LEN, HYADDR_FAMILY_AFINET4, 0, 0, 0,
- hysocketP);
-
- result = hysock_setflag (HYSOCK_MSG_PEEK, &flags);
- if (0 > result)
- {
- throwJavaNetSocketException (env, result);
- return (jint) 0;
- }
- result =
- hysock_readfrom (hysocketP, (U_8 *) msg, msgLen, flags, &sockaddrP);
+ hysock_sockaddr_init6(&sockaddrP, (U_8 *) nlocalAddrBytes,
+ HYSOCK_INADDR_LEN, HYADDR_FAMILY_AFINET4, 0, 0, 0,
+ hysocketP);
+
+ result = hysock_setflag(HYSOCK_MSG_PEEK, &flags);
+ if (0 > result) {
+ throwJavaNetSocketException(env, result);
+ return (jint) 0;
+ }
+ result = hysock_readfrom(hysocketP, (U_8 *) msg, msgLen, flags, &sockaddrP);
-/* Note, the msgsize error is acceptable as the read buffer was set to a nominal length.
- Updating sockaddrP is the purpose of this call. */
- if (result < 0 && result != HYPORT_ERROR_SOCKET_MSGSIZE)
- {
- throwJavaNetSocketException (env, result);
- return (jint) 0;
- }
- else
- {
- updateAddress (env, &sockaddrP, senderAddress);
- hport = (jint) hysock_ntohs (hysock_sockaddr_port (&sockaddrP));
- return hport;
- }
+/* Note, the msgsize error is acceptable as the read buffer was set to a nominal length.
+ Updating sockaddrP is the purpose of this call. */
+ if (result < 0 && result != HYPORT_ERROR_SOCKET_MSGSIZE) {
+ throwJavaNetSocketException(env, result);
+ return (jint) 0;
+ } else {
+ updateAddress(env, &sockaddrP, senderAddress);
+ hport = (jint) hysock_ntohs(hysock_sockaddr_port(&sockaddrP));
+ return hport;
+ }
}
/*
@@ -1220,39 +1079,33 @@
* Method: receiveDatagramImpl
* Signature: (Ljava/io/FileDescriptor;Ljava/net/DatagramPacket;[BIIIZ)I
*/
-JNIEXPORT jint JNICALL Java_org_apache_harmony_luni_platform_OSNetworkSystem_receiveDatagramImpl(JNIEnv * env,
- jclass thisClz,
- jobject
- fileDescriptor,
- jobject
- datagramPacket,
- jbyteArray data,
- jint offset,
- jint msgLength,
- jint timeout,
- jboolean peek)
-{
- PORT_ACCESS_FROM_ENV (env);
- jbyte *message;
- jint result;
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_luni_platform_OSNetworkSystem_receiveDatagramImpl
+ (JNIEnv * env, jclass thisClz, jobject fileDescriptor,
+ jobject datagramPacket, jbyteArray data, jint offset, jint msgLength,
+ jint timeout, jboolean peek)
+{
+ PORT_ACCESS_FROM_ENV(env);
+ jbyte *message;
+ jint result;
I_32 localCount;
-
- localCount = (msgLength < 65536) ? msgLength : 65536;
- message = hymem_allocate_memory (localCount);
- if (message == NULL)
- {
- throwNewOutOfMemoryError (env, "");
- return 0;
- }
-
- result = Java_org_apache_harmony_luni_platform_OSNetworkSystem_receiveDatagramDirectImpl(env, thisClz, fileDescriptor,
- datagramPacket, (jlong)message, offset, localCount , timeout, peek);
-
- if (result > 0)
- {
- (*env)->SetByteArrayRegion (env, data, offset, result, message);
- }
- hymem_free_memory (message);
+
+ localCount = (msgLength < 65536) ? msgLength : 65536;
+ message = hymem_allocate_memory(localCount);
+ if (message == NULL) {
+ throwNewOutOfMemoryError(env, "");
+ return 0;
+ }
+
+ result =
+ Java_org_apache_harmony_luni_platform_OSNetworkSystem_receiveDatagramDirectImpl
+ (env, thisClz, fileDescriptor, datagramPacket, (jlong) message, offset,
+ localCount, timeout, peek);
+
+ if (result > 0) {
+ (*env)->SetByteArrayRegion(env, data, offset, result, message);
+ }
+ hymem_free_memory(message);
return result;
}
@@ -1260,115 +1113,96 @@
* Class: org_apache_harmony_luni_platform_OSNetworkSystem
* Method: receiveDatagramDirectImpl
* Signature: (Ljava/io/FileDescriptor;Ljava/net/DatagramPacket;JIIIZ)I
- */
-JNIEXPORT jint JNICALL Java_org_apache_harmony_luni_platform_OSNetworkSystem_receiveDatagramDirectImpl(JNIEnv *env,
- jclass thisClz,
- jobject fileDescriptor,
- jobject datagramPacket,
- jlong address,
- jint offset,
- jint msgLength,
- jint timeout,
- jboolean peek)
-{
- PORT_ACCESS_FROM_ENV (env);
- jbyte *message = (jbyte *)address;
- hysocket_t hysocketP;
- hysockaddr_struct sockaddrP;
+ */
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_luni_platform_OSNetworkSystem_receiveDatagramDirectImpl
+ (JNIEnv * env, jclass thisClz, jobject fileDescriptor,
+ jobject datagramPacket, jlong address, jint offset, jint msgLength,
+ jint timeout, jboolean peek)
+{
+ PORT_ACCESS_FROM_ENV(env);
+ jbyte *message = (jbyte *) address;
+ hysocket_t hysocketP;
+ hysockaddr_struct sockaddrP;
I_32 result, localCount;
I_32 flags = HYSOCK_NOFLAGS;
- jbyte nlocalAddrBytes[HYSOCK_INADDR6_LEN];
+ jbyte nlocalAddrBytes[HYSOCK_INADDR6_LEN];
- hysocketP = getJavaIoFileDescriptorContentsAsAPointer (env, fileDescriptor);
- result = pollSelectRead (env, fileDescriptor, timeout, TRUE);
+ hysocketP = getJavaIoFileDescriptorContentsAsAPointer(env, fileDescriptor);
+ result = pollSelectRead(env, fileDescriptor, timeout, TRUE);
//result = selectRead (env,hysocketP, timeout, FALSE);
- if (0 > result)
+ if (0 > result) {
+ return (jint) 0;
+ }
+
+ if (!hysock_socketIsValid(hysocketP)) {
+ throwJavaNetSocketException(env, HYPORT_ERROR_SOCKET_BADSOCKET);
return (jint) 0;
+ }
- if (!hysock_socketIsValid (hysocketP))
- {
- throwJavaNetSocketException (env, HYPORT_ERROR_SOCKET_BADSOCKET);
- return (jint) 0;
- }
+ hysock_sockaddr_init6(&sockaddrP, (U_8 *) nlocalAddrBytes,
+ HYSOCK_INADDR_LEN, HYADDR_FAMILY_AFINET4, 0, 0, 0,
+ hysocketP);
- hysock_sockaddr_init6 (&sockaddrP, (U_8 *) nlocalAddrBytes,
- HYSOCK_INADDR_LEN, HYADDR_FAMILY_AFINET4, 0, 0, 0,
- hysocketP);
-
- localCount = (msgLength < 65536) ? msgLength : 65536;
-
- if (peek)
- {
- result = hysock_setflag (HYSOCK_MSG_PEEK, &flags);
- if (result)
- {
- throwJavaNetSocketException (env, result);
- return (jint) 0;
- }
- }
- result =
- hysock_readfrom (hysocketP, (U_8 *)message, localCount, flags, &sockaddrP);
-
- if (result < 0)
- {
- throwJavaNetSocketException (env, result);
+ localCount = (msgLength < 65536) ? msgLength : 65536;
+
+ if (peek) {
+ result = hysock_setflag(HYSOCK_MSG_PEEK, &flags);
+ if (result) {
+ throwJavaNetSocketException(env, result);
return (jint) 0;
}
- else
- {
- if(datagramPacket != NULL)
- {
- updatePacket (env, &sockaddrP, datagramPacket, result);
- }
- return (jint) result;
+ }
+ result =
+ hysock_readfrom(hysocketP, (U_8 *) message, localCount, flags,
+ &sockaddrP);
+
+ if (result < 0) {
+ throwJavaNetSocketException(env, result);
+ return (jint) 0;
+ } else {
+ if (datagramPacket != NULL) {
+ updatePacket(env, &sockaddrP, datagramPacket, result);
}
+ return (jint) result;
+ }
}
/*
* Class: org_apache_harmony_luni_platform_OSNetworkSystem
- * Method: recvConnectedDatagramImpl
+ * Method: recvConnectedDatagramImpl
* Signature: (Ljava/io/FileDescriptor;Ljava/net/DatagramPacket;[BIIIZ)I
*/
-JNIEXPORT jint JNICALL Java_org_apache_harmony_luni_platform_OSNetworkSystem_recvConnectedDatagramImpl(JNIEnv * env,
- jclass
- thisClz,
- jobject
- fileDescriptor,
- jobject
- datagramPacket,
- jbyteArray
- data,
- jint offset,
- jint
- msgLength,
- jint timeout,
- jboolean
- peek)
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_luni_platform_OSNetworkSystem_recvConnectedDatagramImpl
+ (JNIEnv * env, jclass thisClz, jobject fileDescriptor,
+ jobject datagramPacket, jbyteArray data, jint offset, jint msgLength,
+ jint timeout, jboolean peek)
{
-
- PORT_ACCESS_FROM_ENV (env);
- jbyte *message;
+ PORT_ACCESS_FROM_ENV(env);
+ jbyte *message;
jint result;
I_32 localCount;
-
+
/* allocate the buffer into which data will be read */
- localCount = (msgLength < 65536) ? msgLength : 65536;
- message = hymem_allocate_memory (localCount);
- if (message == NULL)
- {
- throwNewOutOfMemoryError (env, "");
- return 0;
- }
-
- result = Java_org_apache_harmony_luni_platform_OSNetworkSystem_recvConnectedDatagramDirectImpl(env,
- thisClz, fileDescriptor, datagramPacket, (jlong)message, offset, localCount, timeout, peek);
- if (result > 0)
- {
- (*env)->SetByteArrayRegion (env, data, offset, result, message);
-
- }
- hymem_free_memory ( message);
- return result;
+ localCount = (msgLength < 65536) ? msgLength : 65536;
+ message = hymem_allocate_memory(localCount);
+ if (message == NULL) {
+ throwNewOutOfMemoryError(env, "");
+ return 0;
+ }
+
+ result =
+ Java_org_apache_harmony_luni_platform_OSNetworkSystem_recvConnectedDatagramDirectImpl
+ (env, thisClz, fileDescriptor, datagramPacket, (jlong) message, offset,
+ localCount, timeout, peek);
+
+ if (result > 0) {
+ (*env)->SetByteArrayRegion(env, data, offset, result, message);
+
+ }
+ hymem_free_memory(message);
+ return result;
}
@@ -1377,81 +1211,65 @@
* Method: recvConnectedDatagramDirectImpl
* Signature: (Ljava/io/FileDescriptor;Ljava/net/DatagramPacket;JIIIZ)I
*/
-JNIEXPORT jint JNICALL Java_org_apache_harmony_luni_platform_OSNetworkSystem_recvConnectedDatagramDirectImpl(JNIEnv *env,
- jclass thisClz,
- jobject fileDescriptor,
- jobject
- datagramPacket,
- jlong address,
- jint offset,
- jint msgLength,
- jint timeout,
- jboolean peek)
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_luni_platform_OSNetworkSystem_recvConnectedDatagramDirectImpl
+ (JNIEnv * env, jclass thisClz, jobject fileDescriptor,
+ jobject datagramPacket, jlong address, jint offset, jint msgLength,
+ jint timeout, jboolean peek)
{
- PORT_ACCESS_FROM_ENV (env);
+ PORT_ACCESS_FROM_ENV(env);
hysocket_t hysocketP;
- jbyte * message = (jbyte *)address;
+ jbyte *message = (jbyte *) address;
I_32 result;
I_32 localCount;
I_32 flags = HYSOCK_NOFLAGS;
localCount = (msgLength < 65536) ? msgLength : 65536;
- /* check if there is any data to be read before we go ahead and do the read */
- result = pollSelectRead (env, fileDescriptor, timeout, TRUE);
- if (0 > result)
- {
- return (jint) 0;
- }
+ /* check if there is any data to be read before we go ahead and do the read */
+ result = pollSelectRead(env, fileDescriptor, timeout, TRUE);
+ if (0 > result) {
+ return (jint) 0;
+ }
/* get the handle to the socket */
- hysocketP = getJavaIoFileDescriptorContentsAsAPointer (env, fileDescriptor);
- if (!hysock_socketIsValid (hysocketP))
- {
- throwJavaNetSocketException (env, HYPORT_ERROR_SOCKET_BADSOCKET);
- return (jint) 0;
- }
+ hysocketP = getJavaIoFileDescriptorContentsAsAPointer(env, fileDescriptor);
+ if (!hysock_socketIsValid(hysocketP)) {
+ throwJavaNetSocketException(env, HYPORT_ERROR_SOCKET_BADSOCKET);
+ return (jint) 0;
+ }
/* check for peek option, if so set the appropriate flag */
- if (peek)
- {
- result = hysock_setflag (HYSOCK_MSG_PEEK, &flags);
- if (result)
- {
- throwJavaNetSocketException (env, result);
- return (jint) 0;
- }
+ if (peek) {
+ result = hysock_setflag(HYSOCK_MSG_PEEK, &flags);
+ if (result) {
+ throwJavaNetSocketException(env, result);
+ return (jint) 0;
}
+ }
/* read the data and copy it to the return array, then free the buffer as we
- no longer need it */
- result = hysock_read (hysocketP, (U_8 *)message, localCount, flags);
-
- if (result < 0)
- {
- if ((HYPORT_ERROR_SOCKET_CONNRESET == result)
- || (HYPORT_ERROR_SOCKET_CONNECTION_REFUSED == result))
- {
- throwJavaNetPortUnreachableException (env, result);
- return (jint) 0;
- }
- else
- {
- throwJavaNetSocketException (env, result);
- return (jint) 0;
- }
- }
- else
- {
- /* update the packet with the length of data received.
- Since we are connected we did not get back an address. This
- address is cached within the PlainDatagramSocket java object and is filled in at
- the java level */
- if(datagramPacket != NULL)
- {
- setDatagramPacketLength (env, datagramPacket, result);
- }
- return (jint) result;
+ no longer need it */
+ result = hysock_read(hysocketP, (U_8 *) message, localCount, flags);
+
+ if (result < 0) {
+ if ((HYPORT_ERROR_SOCKET_CONNRESET == result)
+ || (HYPORT_ERROR_SOCKET_CONNECTION_REFUSED == result)) {
+ throwJavaNetPortUnreachableException(env, result);
+ return (jint) 0;
+ } else {
+ throwJavaNetSocketException(env, result);
+ return (jint) 0;
}
+ } else {
+ /* update the packet with the length of data received.
+ Since we are connected we did not get back an address. This
+ address is cached within the PlainDatagramSocket java object and is filled in at
+ the java level */
+ if (datagramPacket != NULL) {
+ setDatagramPacketLength(env, datagramPacket, result);
+ }
+ return (jint) result;
+ }
}
/*
@@ -1459,33 +1277,27 @@
* Method: sendDatagramImpl
* Signature: (Ljava/io/FileDescriptor;[BIIIZILjava/net/InetAddress;)I
*/
-JNIEXPORT jint JNICALL Java_org_apache_harmony_luni_platform_OSNetworkSystem_sendDatagramImpl(JNIEnv * env,
- jclass thisClz,
- jobject
- fileDescriptor,
- jbyteArray data,
- jint offset,
- jint msgLength,
- jint targetPort,
- jboolean
- bindToDevice,
- jint trafficClass,
- jobject inetAddress)
-{
- PORT_ACCESS_FROM_ENV (env);
- jbyte *message;
- jint result = 0;
-
- message = hymem_allocate_memory(msgLength);
- if (message == NULL)
- {
- throwNewOutOfMemoryError (env, "");
- return 0;
- }
- (*env)->GetByteArrayRegion (env, data, offset, msgLength, message);
- result = Java_org_apache_harmony_luni_platform_OSNetworkSystem_sendDatagramDirectImpl(env, thisClz,
- fileDescriptor,(jlong)message, offset, msgLength, targetPort, bindToDevice, trafficClass, inetAddress);
- hymem_free_memory(message);
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_luni_platform_OSNetworkSystem_sendDatagramImpl
+ (JNIEnv * env, jclass thisClz, jobject fileDescriptor, jbyteArray data,
+ jint offset, jint msgLength, jint targetPort, jboolean bindToDevice,
+ jint trafficClass, jobject inetAddress)
+{
+ PORT_ACCESS_FROM_ENV(env);
+ jbyte *message;
+ jint result = 0;
+
+ message = hymem_allocate_memory(msgLength);
+ if (message == NULL) {
+ throwNewOutOfMemoryError(env, "");
+ return 0;
+ }
+ (*env)->GetByteArrayRegion(env, data, offset, msgLength, message);
+ result =
+ Java_org_apache_harmony_luni_platform_OSNetworkSystem_sendDatagramDirectImpl
+ (env, thisClz, fileDescriptor, (jlong) message, offset, msgLength,
+ targetPort, bindToDevice, trafficClass, inetAddress);
+ hymem_free_memory(message);
return result;
}
@@ -1494,213 +1306,163 @@
* Method: sendDatagramDirectImpl
* Signature: (Ljava/io/FileDescriptor;JIIIZILjava/net/InetAddress;)I
*/
-JNIEXPORT jint JNICALL Java_org_apache_harmony_luni_platform_OSNetworkSystem_sendDatagramDirectImpl(JNIEnv * env,
- jclass thisClz,
- jobject
- fileDescriptor,
- jlong address,
- jint offset,
- jint msgLength,
- jint targetPort,
- jboolean
- bindToDevice,
- jint trafficClass,
- jobject inetAddress)
-{
- PORT_ACCESS_FROM_ENV (env);
- jbyte *message = (jbyte *)address;
- jbyte nhostAddrBytes[HYSOCK_INADDR6_LEN];
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_luni_platform_OSNetworkSystem_sendDatagramDirectImpl
+ (JNIEnv * env, jclass thisClz, jobject fileDescriptor, jlong address,
+ jint offset, jint msgLength, jint targetPort, jboolean bindToDevice,
+ jint trafficClass, jobject inetAddress)
+{
+ PORT_ACCESS_FROM_ENV(env);
+ jbyte *message = (jbyte *) address;
+ jbyte nhostAddrBytes[HYSOCK_INADDR6_LEN];
int length;
U_16 nPort;
- I_32 result = 0, sent = 0;
+ I_32 result = 0, sent = 0;
hysocket_t socketP;
hysockaddr_struct sockaddrP;
int flags;
- U_32 scope_id = 0;
+ U_32 scope_id = 0;
- netGetJavaNetInetAddressValue (env, inetAddress, (U_8 *)nhostAddrBytes, (U_32 *)&length);
- nPort = hysock_htons ((U_16) targetPort);
+ netGetJavaNetInetAddressValue(env, inetAddress, (U_8 *) nhostAddrBytes,
+ (U_32 *) & length);
+ nPort = hysock_htons((U_16) targetPort);
+
+ socketP = getJavaIoFileDescriptorContentsAsAPointer(env, fileDescriptor);
+ if (length == HYSOCK_INADDR6_LEN) {
+ netGetJavaNetInetAddressScopeId(env, inetAddress, &scope_id);
+ hysock_sockaddr_init6(&sockaddrP, (U_8 *) nhostAddrBytes, length,
+ HYADDR_FAMILY_AFINET6, nPort,
+ (trafficClass & 0xFF) << 20, scope_id, socketP);
+ } else {
+ hysock_sockaddr_init6(&sockaddrP, (U_8 *) nhostAddrBytes, length,
+ HYADDR_FAMILY_AFINET4, nPort, 0, scope_id, socketP);
+ }
- socketP = getJavaIoFileDescriptorContentsAsAPointer (env, fileDescriptor);
- if (length == HYSOCK_INADDR6_LEN)
- {
- netGetJavaNetInetAddressScopeId (env, inetAddress, &scope_id);
- hysock_sockaddr_init6 (&sockaddrP, (U_8 *)nhostAddrBytes, length,
- HYADDR_FAMILY_AFINET6, nPort,
- (trafficClass & 0xFF) << 20, scope_id, socketP);
- }
- else
- {
- hysock_sockaddr_init6 (&sockaddrP, (U_8 *)nhostAddrBytes, length,
- HYADDR_FAMILY_AFINET4, nPort, 0, scope_id,
- socketP);
- }
-
- flags = HYSOCK_NOFLAGS;
-
- socketP =
- getJavaIoFileDescriptorContentsAsAPointer (env, fileDescriptor);
- if (!hysock_socketIsValid (socketP))
- {
- throwJavaNetSocketException (env,
- sent ==
- 0 ? HYPORT_ERROR_SOCKET_BADSOCKET :
- HYPORT_ERROR_SOCKET_INTERRUPTED);
- return (jint) 0;
- }
-
- do
- {
- result =
- hysock_writeto (socketP, (U_8 *)message + sent, (I_32) msgLength - sent,
- flags, &sockaddrP);
- if (result < 0)
- break;
- sent += result;
- }
- while (sent < msgLength);
-
- if (result < 0)
- {
- throwJavaNetSocketException (env, result);
- return (jint) 0;
- }
- else
- {
- return (jint) result;
- }
+ flags = HYSOCK_NOFLAGS;
+
+ socketP = getJavaIoFileDescriptorContentsAsAPointer(env, fileDescriptor);
+ if (!hysock_socketIsValid(socketP)) {
+ throwJavaNetSocketException(env,
+ sent ==
+ 0 ? HYPORT_ERROR_SOCKET_BADSOCKET :
+ HYPORT_ERROR_SOCKET_INTERRUPTED);
+ return (jint) 0;
+ }
+
+ do {
+ result =
+ hysock_writeto(socketP, (U_8 *) message + sent, (I_32) msgLength - sent,
+ flags, &sockaddrP);
+ if (result < 0)
+ break;
+ sent += result;
+ } while (sent < msgLength);
+
+ if (result < 0) {
+ throwJavaNetSocketException(env, result);
+ return (jint) 0;
+ } else {
+ return (jint) result;
+ }
}
/*
* Class: org_apache_harmony_luni_platform_OSNetworkSystem
- * Method: sendConnectedDatagramImpl
+ * Method: sendConnectedDatagramImpl
* Signature: (Ljava/io/FileDescriptor;[BIIZ)I
*/
-JNIEXPORT jint JNICALL Java_org_apache_harmony_luni_platform_OSNetworkSystem_sendConnectedDatagramImpl(JNIEnv * env,
- jclass
- thisClz,
- jobject
- fileDescriptor,
- jbyteArray
- data,
- jint offset,
- jint
- msgLength,
- jboolean
- bindToDevice)
-{
- PORT_ACCESS_FROM_ENV (env);
- jbyte *message;
- jint result;
- /* allocate a local buffer into which we will copy the data to be sent and which we will use
- for the write call */
- message = hymem_allocate_memory ( msgLength);
- if (message == NULL)
- {
- throwNewOutOfMemoryError (env, "");
- return 0;
- }
- (*env)->GetByteArrayRegion (env, data, offset, msgLength, message);
- result = Java_org_apache_harmony_luni_platform_OSNetworkSystem_sendConnectedDatagramDirectImpl(env, thisClz, fileDescriptor, (jlong)message, offset, msgLength, bindToDevice);
- /* ok free the buffer and return the length sent */
- hymem_free_memory ( message);
- return result;
-}
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_luni_platform_OSNetworkSystem_sendConnectedDatagramImpl
+ (JNIEnv * env, jclass thisClz, jobject fileDescriptor, jbyteArray data,
+ jint offset, jint msgLength, jboolean bindToDevice)
+{
+ PORT_ACCESS_FROM_ENV(env);
+ jbyte *message;
+ jint result;
+ /* allocate a local buffer into which we will copy the data to be sent and which we will use
+ for the write call */
+ message = hymem_allocate_memory(msgLength);
+ if (message == NULL) {
+ throwNewOutOfMemoryError(env, "");
+ return 0;
+ }
+ (*env)->GetByteArrayRegion(env, data, offset, msgLength, message);
+ result =
+ Java_org_apache_harmony_luni_platform_OSNetworkSystem_sendConnectedDatagramDirectImpl
+ (env, thisClz, fileDescriptor, (jlong) message, offset, msgLength,
+ bindToDevice);
+ /* ok free the buffer and return the length sent */
+ hymem_free_memory(message);
+ return result;
+}
/*
* Class: org_apache_harmony_luni_platform_OSNetworkSystem
* Method: sendConnectedDatagramDirectImpl
* Signature: (Ljava/io/FileDescriptor;JIIZ)I
*/
-JNIEXPORT jint JNICALL Java_org_apache_harmony_luni_platform_OSNetworkSystem_sendConnectedDatagramDirectImpl(JNIEnv
- *env,
- jclass
- thisClz,
- jobject
- fileDescriptor,
- jlong
- address,
- jint
- offset,
- jint
- msgLength,
- jboolean
- bindToDevice)
-{
- PORT_ACCESS_FROM_ENV (env);
- jbyte *message = (jbyte *)address;
- I_32 result = 0;
+JNIEXPORT jint JNICALL
+Java_org_apache_harmony_luni_platform_OSNetworkSystem_sendConnectedDatagramDirectImpl
+ (JNIEnv * env, jclass thisClz, jobject fileDescriptor, jlong address,
+ jint offset, jint msgLength, jboolean bindToDevice)
+{
+ PORT_ACCESS_FROM_ENV(env);
+ jbyte *message = (jbyte *) address;
+ I_32 result = 0;
I_32 sent = 0;
hysocket_t socketP;
- int flags = HYSOCK_NOFLAGS;
+ int flags = HYSOCK_NOFLAGS;
- do
- {
- /* make sure the socket is still valid */
- socketP =
- (hysocket_t) getJavaIoFileDescriptorContentsAsAPointer (env,
- fileDescriptor);
- if (!hysock_socketIsValid (socketP))
- {
- throwJavaNetSocketException (env,
- sent ==
- 0 ? HYPORT_ERROR_SOCKET_BADSOCKET :
- HYPORT_ERROR_SOCKET_INTERRUPTED);
- return (jint) 0;
- }
+ do {
+ /* make sure the socket is still valid */
+ socketP =
+ (hysocket_t) getJavaIoFileDescriptorContentsAsAPointer(env, fileDescriptor);
+ if (!hysock_socketIsValid(socketP)) {
+ throwJavaNetSocketException(env,
+ sent == 0 ?
+ HYPORT_ERROR_SOCKET_BADSOCKET :
+ HYPORT_ERROR_SOCKET_INTERRUPTED);
+ return (jint) 0;
+ }
- /* try to send the next block of data */
- result =
- hysock_write (socketP, (U_8 *)message + sent, (I_32) msgLength - sent,
- flags);
- if (result < 0)
- {
- break;
- }
- sent += result;
+ /* try to send the next block of data */
+ result =
+ hysock_write(socketP, (U_8 *) message + sent, (I_32) msgLength - sent,
+ flags);
+ if (result < 0) {
+ break;
}
- while (sent < msgLength);
+ sent += result;
+ } while (sent < msgLength);
#if defined(LINUX)
- if (result < 0)
- {
- if ((HYPORT_ERROR_SOCKET_CONNRESET == result)
- || (HYPORT_ERROR_SOCKET_CONNECTION_REFUSED == result))
- {
- //throwJavaNetPortUnreachableException (env, result);
- return (jint) 0;
- }
- else
- {
- throwJavaNetSocketException (env, result);
- return (jint) 0;
- }
- }
- else
- {
- return (jint) result;
+ if (result < 0) {
+ if ((HYPORT_ERROR_SOCKET_CONNRESET == result)
+ || (HYPORT_ERROR_SOCKET_CONNECTION_REFUSED == result)) {
+ //throwJavaNetPortUnreachableException (env, result);
+ return (jint) 0;
+ } else {
+ throwJavaNetSocketException(env, result);
+ return (jint) 0;
}
+ } else {
+ return (jint) result;
+ }
#endif
- if (result < 0)
- {
- if ((HYPORT_ERROR_SOCKET_CONNRESET == result)
- || (HYPORT_ERROR_SOCKET_CONNECTION_REFUSED == result))
- {
- throwJavaNetPortUnreachableException (env, result);
- return (jint) 0;
- }
- else
- {
- throwJavaNetSocketException (env, result);
- return (jint) 0;
- }
- }
- else
- {
- return (jint) result;
+ if (result < 0) {
+ if ((HYPORT_ERROR_SOCKET_CONNRESET == result)
[... 1607 lines stripped ...]