cvs commit: jakarta-tomcat-connectors/jni/native/src jnilib.c proc.c stdlib.c
mturk 2005/06/30 00:10:29 Modified:jni/java/org/apache/tomcat/jni Stdlib.java jni/native/include tcn.h jni/native/src jnilib.c proc.c stdlib.c Log: Add getpid and getppid functions. The getppid function on WIndows is simulated by passing the environment value to the child process. Revision ChangesPath 1.3 +13 -1 jakarta-tomcat-connectors/jni/java/org/apache/tomcat/jni/Stdlib.java Index: Stdlib.java === RCS file: /home/cvs/jakarta-tomcat-connectors/jni/java/org/apache/tomcat/jni/Stdlib.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- Stdlib.java 14 Jan 2005 14:42:37 - 1.2 +++ Stdlib.java 30 Jun 2005 07:10:29 - 1.3 @@ -74,4 +74,16 @@ */ public static native void free(long mem); +/** + * Get current process pid. + * @return current pid or < 1 in case of error. + */ +public static native int getpid(); + +/** + * Get current process parent pid. + * @return parent pid or < 1 in case of error. + */ +public static native int getppid(); + } 1.27 +2 -1 jakarta-tomcat-connectors/jni/native/include/tcn.h Index: tcn.h === RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/include/tcn.h,v retrieving revision 1.26 retrieving revision 1.27 diff -u -r1.26 -r1.27 --- tcn.h 23 Jun 2005 08:58:05 - 1.26 +++ tcn.h 30 Jun 2005 07:10:29 - 1.27 @@ -83,6 +83,7 @@ #define TCN_FINFO_CLASS TCN_CLASS_PATH "FileInfo" #define TCN_AINFO_CLASS TCN_CLASS_PATH "Sockaddr" #define TCN_ERROR_CLASS TCN_CLASS_PATH "Error" +#define TCN_PARENT_IDE "TCN_PARENT_ID" #define UNREFERENCED(P) (P) = (P) #define UNREFERENCED_STDARGS e = e; o = o 1.13 +12 -2 jakarta-tomcat-connectors/jni/native/src/jnilib.c Index: jnilib.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/src/jnilib.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- jnilib.c 23 Jun 2005 08:58:05 - 1.12 +++ jnilib.c 30 Jun 2005 07:10:29 - 1.13 @@ -42,6 +42,8 @@ static jmethodID jString_init; static jmethodID jString_getBytes; +int tcn_parent_pid = 0; + /* Called by the JVM when APR_JAVA is loaded */ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) { @@ -67,7 +69,15 @@ return JNI_ERR; if(tcn_load_ainfo_class(env, jAinfo_class) != APR_SUCCESS) return JNI_ERR; - +#ifdef WIN32 +{ +char *ppid = getenv(TCN_PARENT_IDE); +if (ppid) +tcn_parent_pid = atoi(ppid); +} +#else +tcn_parent_pid = getppid(); +#endif apr_initialize(); return JNI_VERSION_1_4; 1.6 +19 -4 jakarta-tomcat-connectors/jni/native/src/proc.c Index: proc.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/src/proc.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- proc.c17 Jun 2005 09:41:30 - 1.5 +++ proc.c30 Jun 2005 07:10:29 - 1.6 @@ -209,7 +209,7 @@ as = (*e)->GetArrayLength(e, args); if (env) es = (*e)->GetArrayLength(e, args); -if (as > MAX_ARGS_SIZE || es > MAX_ENV_SIZE) { +if (as > (MAX_ARGS_SIZE - 1) || es > (MAX_ENV_SIZE - 2)) { TCN_FREE_CSTRING(progname); return APR_EINVAL; } @@ -219,19 +219,34 @@ s_args[i] = tcn_get_string(e, str); (*e)->DeleteLocalRef(e, str); } +s_args[i] = NULL; pargs = (const char * const *)&s_args[0]; } if (es) { for (i = 0; i < es; i++) { jstring str = (*e)->GetObjectArrayElement(e, env, i); -s_env[i] = tcn_get_string(e, str); +s_env[i+1] = tcn_get_string(e, str); (*e)->DeleteLocalRef(e, str); } +#ifdef WIN32 +s_env[i++] = apr_psprintf(p, TCN_PARENT_IDE "=%d", getpid()); +#endif +s_env[i] = NULL; penv = (const char * const *)&s_env[0]; } - +#ifdef WIN32 +else { +char pps[32]; +itoa(getpid(), pps, 10); +SetEnvironmentVariable(TCN_PARENT_IDE, pps); +} +#endif rv = apr_proc_create(np, J2S(progname), pargs, penv, a, p); +#ifdef WIN32 +if (!es) +SetEnvironmentVariable(TCN_PARENT_IDE, NULL); +#endif /* Free local resources */ TCN_FREE_CSTRING(progname); 1.4 +15 -1 jakarta-to
cvs commit: jakarta-tomcat-connectors/jni/native/src jnilib.c ssl.c sslinfo.c
mturk 2005/06/16 04:39:12 Modified:jni/native/include ssl_private.h tcn.h jni/native/src jnilib.c ssl.c sslinfo.c Log: Add more SSL infos. Also change the tcn_new_string to allow the NULL to be passed. Revision ChangesPath 1.30 +4 -1 jakarta-tomcat-connectors/jni/native/include/ssl_private.h Index: ssl_private.h === RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/include/ssl_private.h,v retrieving revision 1.29 retrieving revision 1.30 diff -u -r1.29 -r1.30 --- ssl_private.h 15 Jun 2005 12:08:02 - 1.29 +++ ssl_private.h 16 Jun 2005 11:39:12 - 1.30 @@ -145,6 +145,9 @@ #define SSL_INFO_CIPHER (2) #define SSL_INFO_CIPHER_USEKEYSIZE (3) #define SSL_INFO_CIPHER_ALGKEYSIZE (4) +#define SSL_INFO_CIPHER_VERSION (5) +#define SSL_INFO_CIPHER_DESCRIPTION (6) +#define SSL_INFO_PROTOCOL (7) #define SSL_VERIFY_ERROR_IS_OPTIONAL(errnum) \ ((errnum == X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT) \ 1.18 +4 -2 jakarta-tomcat-connectors/jni/native/include/tcn.h Index: tcn.h === RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/include/tcn.h,v retrieving revision 1.17 retrieving revision 1.18 diff -u -r1.17 -r1.18 --- tcn.h 12 Jun 2005 07:01:03 - 1.17 +++ tcn.h 16 Jun 2005 11:39:12 - 1.18 @@ -97,7 +97,9 @@ voidtcn_Throw(JNIEnv *, const char *, ...); voidtcn_ThrowException(JNIEnv *, const char *); voidtcn_ThrowAPRException(JNIEnv *, apr_status_t); -jstring tcn_new_string(JNIEnv *, const char *, int); +jstring tcn_new_string(JNIEnv *, const char *); +jstring tcn_new_stringn(JNIEnv *, const char *, size_t); +jbyteArray tcn_new_arrayb(JNIEnv *, const unsigned char *, size_t); char *tcn_get_string(JNIEnv *, jstring); char *tcn_strdup(JNIEnv *, jstring); char *tcn_pstrdup(JNIEnv *, jstring, apr_pool_t *); 1.10 +23 -3 jakarta-tomcat-connectors/jni/native/src/jnilib.c Index: jnilib.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/src/jnilib.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- jnilib.c 10 Jun 2005 10:30:18 - 1.9 +++ jnilib.c 16 Jun 2005 11:39:12 - 1.10 @@ -89,12 +89,14 @@ apr_terminate(); } -jstring tcn_new_string(JNIEnv *env, const char *str, int l) +jstring tcn_new_stringn(JNIEnv *env, const char *str, size_t l) { jstring result; jbyteArray bytes = 0; size_t len = l; - + +if (!str) +return NULL; if ((*env)->EnsureLocalCapacity(env, 2) < 0) { return NULL; /* out of memory error */ } @@ -110,6 +112,24 @@ return NULL; } +jbyteArray tcn_new_arrayb(JNIEnv *env, const unsigned char *data, size_t len) +{ +jbyteArray bytes = (*env)->NewByteArray(env, (jsize)len); +if (bytes != NULL) { +(*env)->SetByteArrayRegion(env, bytes, 0, (jint)len, (jbyte *)data); +} +return bytes; +} + + +jstring tcn_new_string(JNIEnv *env, const char *str) +{ +if (!str) +return NULL; +else +return (*env)->NewStringUTF(env, str); +} + char *tcn_get_string(JNIEnv *env, jstring jstr) { jbyteArray bytes = NULL; 1.36 +3 -3 jakarta-tomcat-connectors/jni/native/src/ssl.c Index: ssl.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/src/ssl.c,v retrieving revision 1.35 retrieving revision 1.36 diff -u -r1.35 -r1.36 --- ssl.c 12 Jun 2005 07:33:08 - 1.35 +++ ssl.c 16 Jun 2005 11:39:12 - 1.36 @@ -599,7 +599,7 @@ JNIEnv *e = j->cb.env; ret = (*e)->CallIntMethod(e, j->cb.obj, j->cb.mid[2], - tcn_new_string(e, in, -1)); + tcn_new_string(e, in)); } return ret; } @@ -775,7 +775,7 @@ char buf[256]; UNREFERENCED(o); ERR_error_string(ERR_get_error(), buf); -return tcn_new_string(e, buf, -1); +return tcn_new_string(e, buf); } #else 1.3 +23 -6 jakarta-tomcat-connectors/jni/native/src/sslinfo.c Index: sslinfo.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/src/sslinfo.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- sslinfo.c 15 Jun 2005 12:08:02 - 1
cvs commit: jakarta-tomcat-connectors/jni/native/src jnilib.c
mturk 2005/06/10 03:30:18 Modified:jni/native/src jnilib.c Log: Dump ssl network statistics. Revision ChangesPath 1.9 +3 -1 jakarta-tomcat-connectors/jni/native/src/jnilib.c Index: jnilib.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/src/jnilib.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- jnilib.c 1 Jun 2005 06:33:37 - 1.8 +++ jnilib.c 10 Jun 2005 10:30:18 - 1.9 @@ -35,6 +35,7 @@ #ifdef TCN_DO_STATISTICS extern void sp_poll_dump_statistics(); extern void sp_network_dump_statistics(); +extern void ssl_network_dump_statistics(); #endif apr_pool_t *tcn_global_pool = NULL; @@ -191,6 +192,7 @@ #ifdef TCN_DO_STATISTICS sp_poll_dump_statistics(); sp_network_dump_statistics(); +ssl_network_dump_statistics(); fprintf(stderr, "APR Terminated\n"); #endif } - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-tomcat-connectors/jni/native/src jnilib.c
mturk 2005/05/31 23:33:37 Modified:jni/native/src jnilib.c Log: Change String creation to allow creating without terminating NUL. Revision ChangesPath 1.8 +5 -5 jakarta-tomcat-connectors/jni/native/src/jnilib.c Index: jnilib.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/src/jnilib.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- jnilib.c 30 May 2005 06:17:14 - 1.7 +++ jnilib.c 1 Jun 2005 06:33:37 - 1.8 @@ -88,17 +88,17 @@ apr_terminate(); } -jstring tcn_new_string(JNIEnv *env, const char *str) +jstring tcn_new_string(JNIEnv *env, const char *str, int l) { jstring result; jbyteArray bytes = 0; -size_t len; +size_t len = l; if ((*env)->EnsureLocalCapacity(env, 2) < 0) { return NULL; /* out of memory error */ } - -len = strlen(str); +if (l < 0) +len = strlen(str); bytes = (*env)->NewByteArray(env, (jsize)len); if (bytes != NULL) { (*env)->SetByteArrayRegion(env, bytes, 0, (jint)len, (jbyte *)str); - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-tomcat-connectors/jni/native/src jnilib.c
mturk 2005/05/29 23:17:14 Modified:jni/native/src jnilib.c Log: Rename tcn_dup_string to tcn_strdup and add tcn_pstrdup Revision ChangesPath 1.7 +19 -2 jakarta-tomcat-connectors/jni/native/src/jnilib.c Index: jnilib.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/src/jnilib.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- jnilib.c 28 May 2005 08:18:09 - 1.6 +++ jnilib.c 30 May 2005 06:17:14 - 1.7 @@ -26,6 +26,8 @@ #include "apr_network_io.h" #include "apr_file_io.h" #include "apr_mmap.h" +#include "apr_atomic.h" +#include "apr_strings.h" #include "tcn.h" #include "tcn_version.h" @@ -67,6 +69,7 @@ return JNI_ERR; apr_initialize(); + return JNI_VERSION_1_4; } @@ -136,7 +139,7 @@ return result; } -char *tcn_dup_string(JNIEnv *env, jstring jstr) +char *tcn_strdup(JNIEnv *env, jstring jstr) { char *result = NULL; const char *cjstr; @@ -149,6 +152,19 @@ return result; } +char *tcn_pstrdup(JNIEnv *env, jstring jstr, apr_pool_t *pool) +{ +char *result = NULL; +const char *cjstr; + +cjstr = (const char *)((*env)->GetStringUTFChars(env, jstr, 0)); +if (cjstr) { +result = apr_pstrdup(pool, cjstr); +(*env)->ReleaseStringUTFChars(env, jstr, cjstr); +} +return result; +} + TCN_IMPLEMENT_CALL(jboolean, Library, initialize)(TCN_STDARGS) { @@ -157,6 +173,7 @@ if (apr_pool_create(&tcn_global_pool, NULL) != APR_SUCCESS) { return JNI_FALSE; } +apr_atomic_init(tcn_global_pool); } return JNI_TRUE; } - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-tomcat-connectors/jni/native/src jnilib.c
mturk 2005/05/28 01:18:09 Modified:jni/java/org/apache/tomcat/jni Library.java jni/native/src jnilib.c Log: Check if we have at least APR 1.0 and Threading support. Revision ChangesPath 1.6 +10 -2 jakarta-tomcat-connectors/jni/java/org/apache/tomcat/jni/Library.java Index: Library.java === RCS file: /home/cvs/jakarta-tomcat-connectors/jni/java/org/apache/tomcat/jni/Library.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- Library.java 27 May 2005 10:04:43 - 1.5 +++ Library.java 28 May 2005 08:18:09 - 1.6 @@ -95,6 +95,8 @@ /* TCN_VERSION_STRING */ public static native String versionString(); +/* APR_VERSION_STRING */ +public static native String aprVersionString(); /* APR Feature Macros */ public static boolean APR_HAVE_IPV6 = false; @@ -192,8 +194,14 @@ APR_CHARSET_EBCDIC = has(18); APR_TCP_NODELAY_INHERITED = has(19); APR_O_NONBLOCK_INHERITED = has(20); +if (APR_MAJOR_VERSION < 1) { +throw new UnsatisfiedLinkError("Unsupported APR Version (" + + aprVersionString() + ")"); +} +if (!APR_HAS_THREADS) { +throw new UnsatisfiedLinkError("Missing APR_HAS_THREADS"); +} } return initialize(); } - } 1.6 +7 -1 jakarta-tomcat-connectors/jni/native/src/jnilib.c Index: jnilib.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/src/jnilib.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- jnilib.c 27 May 2005 16:39:13 - 1.5 +++ jnilib.c 28 May 2005 08:18:09 - 1.6 @@ -231,6 +231,12 @@ return AJP_TO_JSTRING(TCN_VERSION_STRING); } +TCN_IMPLEMENT_CALL(jstring, Library, aprVersionString)(TCN_STDARGS) +{ +UNREFERENCED(o); +return AJP_TO_JSTRING(apr_version_string()); +} + TCN_IMPLEMENT_CALL(jboolean, Library, has)(TCN_STDARGS, jint what) { jboolean rv = JNI_FALSE; - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-tomcat-connectors/jni/native/src jnilib.c network.c poll.c
mturk 2005/05/27 09:39:13 Modified:jni/native/include tcn.h jni/native/src jnilib.c network.c poll.c Log: Add statistics data that is compiled in only if -DTCN_DO_STATISTICS is defined at compile time. Revision ChangesPath 1.6 +5 -3 jakarta-tomcat-connectors/jni/native/include/tcn.h Index: tcn.h === RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/include/tcn.h,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- tcn.h 24 May 2005 09:24:39 - 1.5 +++ tcn.h 27 May 2005 16:39:13 - 1.6 @@ -18,7 +18,7 @@ * @author Mladen Turk * @version $Revision$, $Date$ */ - + #ifndef TCN_H #define TCN_H @@ -138,5 +138,7 @@ typedef struct tcn_callback tcn_callback_t; - +#ifdef TCN_DO_STATISTICS +#define TCN_MAX(a, b) ((a) > (b) ? (a) : (b)) +#endif #endif /* TCN_H */ 1.5 +17 -4 jakarta-tomcat-connectors/jni/native/src/jnilib.c Index: jnilib.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/src/jnilib.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- jnilib.c 24 May 2005 09:24:40 - 1.4 +++ jnilib.c 27 May 2005 16:39:13 - 1.5 @@ -18,7 +18,7 @@ * @author Mladen Turk * @version $Revision$, $Date$ */ - + #include "apr.h" #include "apr_pools.h" #include "apr_version.h" @@ -30,6 +30,10 @@ #include "tcn.h" #include "tcn_version.h" +#ifdef TCN_DO_STATISTICS +extern void sp_poll_dump_statistics(); +extern void sp_network_dump_statistics(); +#endif apr_pool_t *tcn_global_pool = NULL; static JavaVM *tcn_global_vm = NULL; @@ -44,7 +48,7 @@ JNIEnv *env; UNREFERENCED(reserved); -if ((*vm)->GetEnv(vm, (void **)&env, JNI_VERSION_1_2)) { +if ((*vm)->GetEnv(vm, (void **)&env, JNI_VERSION_1_4)) { return JNI_ERR; } tcn_global_vm = vm; @@ -63,7 +67,7 @@ return JNI_ERR; apr_initialize(); -return JNI_VERSION_1_2; +return JNI_VERSION_1_4; } @@ -73,6 +77,7 @@ JNIEnv *env; UNREFERENCED(reserved); + if ((*vm)->GetEnv(vm, (void **)&env, JNI_VERSION_1_2)) { return; } @@ -161,8 +166,16 @@ UNREFERENCED_STDARGS; if (tcn_global_pool) { +#ifdef TCN_DO_STATISTICS +fprintf(stderr, "APR Statistical data \n"); +#endif apr_pool_destroy(tcn_global_pool); tcn_global_pool = NULL; +#ifdef TCN_DO_STATISTICS +sp_poll_dump_statistics(); +sp_network_dump_statistics(); +fprintf(stderr, "APR Terminated\n"); +#endif } } 1.21 +51 -3 jakarta-tomcat-connectors/jni/native/src/network.c Index: network.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/src/network.c,v retrieving revision 1.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- network.c 24 May 2005 09:24:40 - 1.20 +++ network.c 27 May 2005 16:39:13 - 1.21 @@ -18,12 +18,19 @@ * @author Mladen Turk * @version $Revision$, $Date$ */ - + #include "apr.h" #include "apr_pools.h" #include "apr_network_io.h" +#include "apr_portable.h" #include "tcn.h" +#ifdef TCN_DO_STATISTICS +static int sp_created = 0; +static int sp_closed = 0; +static int sp_cleared = 0; +static int sp_accepted = 0; +#endif #if !APR_HAVE_IPV6 #define APR_INET6 APR_INET @@ -40,6 +47,25 @@ else if (F == 1) T = SOCK_DGRAM; \ else T = F +#ifdef TCN_DO_STATISTICS + +static apr_status_t sp_socket_cleanup(void *data) +{ +sp_cleared++; +return APR_SUCCESS; +} + +void sp_network_dump_statistics() +{ +fprintf(stderr, "Network Statistics ..\n"); +fprintf(stderr, "Sockets created : %d\n", sp_created); +fprintf(stderr, "Sockets accepted: %d\n", sp_accepted); +fprintf(stderr, "Sockets closed : %d\n", sp_closed); +fprintf(stderr, "Sockets cleared : %d\n", sp_cleared); +} + +#endif + TCN_IMPLEMENT_CALL(jlong, Address, info)(TCN_STDARGS, jstring hostname, jint family, jint port, @@ -138,6 +164,13 @@ TCN_THROW_IF_ERR(apr_socket_create(&s, f, t, protocol, p), s); +#ifdef TCN_DO_STATISTICS +sp_created++; +apr_pool_cleanup_register(p, (const void *)s, + sp_socket_cleanup, + apr_pool_cleanup_null); +#endif + cleanup: return P2J(
cvs commit: jakarta-tomcat-connectors/jni/native/src jnilib.c ssl.c
mturk 2005/05/20 00:31:41 Modified:jni/java/org/apache/tomcat/jni SSL.java jni/native/src jnilib.c ssl.c Log: Added SSL.initialize that needs to be called if SSL support is desired. Revision ChangesPath 1.2 +14 -5 jakarta-tomcat-connectors/jni/java/org/apache/tomcat/jni/SSL.java Index: SSL.java === RCS file: /home/cvs/jakarta-tomcat-connectors/jni/java/org/apache/tomcat/jni/SSL.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- SSL.java 20 May 2005 07:01:03 - 1.1 +++ SSL.java 20 May 2005 07:31:41 - 1.2 @@ -24,10 +24,19 @@ public final class SSL { - /* Return OpenSSL version number */ -private static native int version(); +/* Return OpenSSL version number */ +public static native int version(); + +/* Return OpenSSL version string */ +public static native String versionString(); + +/** + * Initialize OpenSSL support. + * This function needs to be called once for the + * lifetime of JVM. Library.init() has to be called before. + * @return APR status code + */ +public static native int initialize(); - /* Return OpenSSL version string */ -private static native String versionString(); } 1.2 +1 -1 jakarta-tomcat-connectors/jni/native/src/jnilib.c Index: jnilib.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/src/jnilib.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- jnilib.c 14 Jan 2005 13:47:58 - 1.1 +++ jnilib.c 20 May 2005 07:31:41 - 1.2 @@ -25,7 +25,7 @@ #include "tcn_version.h" -static apr_pool_t *tcn_global_pool = NULL; +apr_pool_t *tcn_global_pool = NULL; static JavaVM *tcn_global_vm = NULL; static jclassjString_class; 1.4 +70 -0 jakarta-tomcat-connectors/jni/native/src/ssl.c Index: ssl.c === RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/src/ssl.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- ssl.c 20 May 2005 07:01:04 - 1.3 +++ ssl.c 20 May 2005 07:31:41 - 1.4 @@ -22,6 +22,9 @@ #ifdef HAVE_OPENSSL #include "ssl_private.h" +static int ssl_initialized = 0; +extern apr_pool_t *tcn_global_pool; + TCN_IMPLEMENT_CALL(jint, SSL, version)(TCN_STDARGS) { UNREFERENCED_STDARGS; @@ -34,9 +37,76 @@ return AJP_TO_JSTRING(OPENSSL_VERSION_TEXT); } +/* + * the various processing hooks + */ +static apr_status_t ssl_init_cleanup(void *data) +{ +UNREFERENCED(data); +/* + * Try to kill the internals of the SSL library. + */ +#if OPENSSL_VERSION_NUMBER >= 0x00907001 +/* Corresponds to OPENSSL_load_builtin_modules(): + * XXX: borrowed from apps.h, but why not CONF_modules_free() + * which also invokes CONF_modules_finish()? + */ +CONF_modules_unload(1); +#endif +/* Corresponds to SSL_library_init: */ +EVP_cleanup(); +#if HAVE_ENGINE_LOAD_BUILTIN_ENGINES +ENGINE_cleanup(); +#endif +#if OPENSSL_VERSION_NUMBER >= 0x00907001 +CRYPTO_cleanup_all_ex_data(); +#endif +ERR_remove_state(0); +/* Don't call ERR_free_strings here; ERR_load_*_strings only + * actually load the error strings once per process due to static + * variable abuse in OpenSSL. */ + +/* + * TODO: determine somewhere we can safely shove out diagnostics + * (when enabled) at this late stage in the game: + * CRYPTO_mem_leaks_fp(stderr); + */ +return APR_SUCCESS; +} +TCN_IMPLEMENT_CALL(jint, SSL, initialize)(TCN_STDARGS) +{ + +UNREFERENCED_STDARGS; +if (!tcn_global_pool) +return (jint)APR_EINVAL; +/* Check if already initialized */ +if (ssl_initialized++) +return (jint)APR_SUCCESS; +/* We must register the library in full, to ensure our configuration + * code can successfully test the SSL environment. + */ +CRYPTO_malloc_init(); +ERR_load_crypto_strings(); +SSL_load_error_strings(); +SSL_library_init(); +#if HAVE_ENGINE_LOAD_BUILTIN_ENGINES +ENGINE_load_builtin_engines(); +#endif +#if OPENSSL_VERSION_NUMBER >= 0x00907001 +OPENSSL_load_builtin_modules(); +#endif + +/* + * Let us cleanup the ssl library when the module is unloaded + */ +apr_pool_cleanup_register(tcn_global_pool, NULL, + ssl_init_cleanup, + apr_pool_cleanup_null); +return (jint)APR_SUCCESS; +} #else