Temporary fix for 164692: SSL ops that timeout should throw

java.net.SocketTimeoutException.
This commit is contained in:
nicolson%netscape.com 2002-10-11 03:49:34 +00:00
parent 2ba7411ae0
commit 5a6988bce7
2 changed files with 36 additions and 61 deletions

View File

@ -62,48 +62,6 @@ finish:
return;
}
static void
throwTimeoutException(JNIEnv *env, jint bytesTransferred)
{
jclass clazz = NULL;
jmethodID constructor = NULL;
jobject excep = NULL;
jfieldID bytesTransferredField = NULL;
jint result;
clazz = (*env)->FindClass(env, INTERRUPTED_IO_EXCEPTION);
if( clazz == NULL ) {
ASSERT_OUTOFMEM(env);
return;
}
constructor = (*env)->GetMethodID(env, clazz,
PLAIN_CONSTRUCTOR, PLAIN_CONSTRUCTOR_SIG);
PR_ASSERT(constructor != NULL);
if( constructor == NULL ) {
ASSERT_OUTOFMEM(env);
return;
}
excep = (*env)->NewObject(env, clazz, constructor);
if( excep == NULL ) {
ASSERT_OUTOFMEM(env);
return;
}
bytesTransferredField = (*env)->GetFieldID(env, clazz,
"bytesTransferred", "I");
if( bytesTransferredField == NULL ) {
ASSERT_OUTOFMEM(env);
return;
}
(*env)->SetIntField(env, excep, bytesTransferredField, bytesTransferred);
result = (*env)->Throw(env, excep);
PR_ASSERT(result == 0);
}
JNIEXPORT jbyteArray JNICALL
Java_org_mozilla_jss_ssl_SSLServerSocket_socketAccept
(JNIEnv *env, jobject self, jobject newSock, jint timeout,
@ -142,9 +100,6 @@ Java_org_mozilla_jss_ssl_SSLServerSocket_socketAccept
case PR_PENDING_INTERRUPT_ERROR:
case PR_IO_PENDING_ERROR:
break; /* out of the switch and loop again */
case PR_IO_TIMEOUT_ERROR:
throwTimeoutException(env, 0);
goto finish;
default:
JSSL_throwSSLSocketException(env,
"Failed to accept new connection");

View File

@ -59,6 +59,7 @@ JSSL_throwSSLSocketException(JNIEnv *env, char *message)
jobject excepObj;
jstring msgString;
jint result;
const char *classname=NULL;
/*
* get the error code and error string
@ -86,22 +87,41 @@ JSSL_throwSSLSocketException(JNIEnv *env, char *message)
msgString = (*env)->NewStringUTF(env, msg);
if( msgString == NULL ) goto finish;
/*
* Create the exception object
*/
excepClass = (*env)->FindClass(env, SSLSOCKET_EXCEPTION);
PR_ASSERT(excepClass != NULL);
if( excepClass == NULL ) goto finish;
excepCons = (*env)->GetMethodID(env, excepClass, "<init>",
"(Ljava/lang/String;I)V");
PR_ASSERT( excepCons != NULL );
if( excepCons == NULL ) goto finish;
excepObj = (*env)->NewObject(env, excepClass, excepCons, msgString,
JSS_ConvertNativeErrcodeToJava(nativeErrcode));
PR_ASSERT(excepObj != NULL);
if( excepObj == NULL ) goto finish;
/*
* Create the exception object. Use java.io.InterrupedIOException
* for timeouts, org.mozilla.jss.ssl.SSLSocketException for everything
* else.
* NOTE: When we stop supporting JDK <1.4, we should change
* InterruptedIOException to java.net.SocketTimeoutException.
*/
if( nativeErrcode == PR_IO_TIMEOUT_ERROR ) {
excepClass = (*env)->FindClass(env, INTERRUPTED_IO_EXCEPTION);
PR_ASSERT(excepClass != NULL);
if( excepClass == NULL ) goto finish;
excepCons = (*env)->GetMethodID(env, excepClass, "<init>",
"(Ljava/lang/String;)V");
PR_ASSERT( excepCons != NULL );
if( excepCons == NULL ) goto finish;
excepObj = (*env)->NewObject(env, excepClass, excepCons, msgString);
PR_ASSERT(excepObj != NULL);
if( excepObj == NULL ) goto finish;
} else {
excepClass = (*env)->FindClass(env, SSLSOCKET_EXCEPTION);
PR_ASSERT(excepClass != NULL);
if( excepClass == NULL ) goto finish;
excepCons = (*env)->GetMethodID(env, excepClass, "<init>",
"(Ljava/lang/String;I)V");
PR_ASSERT( excepCons != NULL );
if( excepCons == NULL ) goto finish;
excepObj = (*env)->NewObject(env, excepClass, excepCons, msgString,
JSS_ConvertNativeErrcodeToJava(nativeErrcode));
PR_ASSERT(excepObj != NULL);
if( excepObj == NULL ) goto finish;
}
/*
* throw the exception