mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-10 11:55:49 +00:00
Temporary fix for 164692: SSL ops that timeout should throw
java.net.SocketTimeoutException.
This commit is contained in:
parent
2ba7411ae0
commit
5a6988bce7
@ -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");
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user