Author: mturk Date: Fri Aug 19 18:34:27 2011 New Revision: 1159735 URL: http://svn.apache.org/viewvc?rev=1159735&view=rev Log: Move openssl to modules directory
Added: commons/sandbox/runtime/trunk/src/main/native/modules/ commons/sandbox/runtime/trunk/src/main/native/modules/openssl/ commons/sandbox/runtime/trunk/src/main/native/modules/openssl/api.c (with props) Removed: commons/sandbox/runtime/trunk/src/main/native/srclib/openssl/ Modified: commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in commons/sandbox/runtime/trunk/src/main/native/Makefile.unx.in commons/sandbox/runtime/trunk/src/main/native/include/acr/descriptor.h commons/sandbox/runtime/trunk/src/main/native/os/unix/arch_sync.h commons/sandbox/runtime/trunk/src/main/native/os/win32/arch_sync.h Modified: commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in?rev=1159735&r1=1159734&r2=1159735&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in (original) +++ commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in Fri Aug 19 18:34:27 2011 @@ -19,9 +19,9 @@ SRCDIRS=\ $(TOPDIR)\os\win32 \ $(TOPDIR)\port \ + $(TOPDIR)\modules\openssl \ $(TOPDIR)\shared \ $(TOPDIR)\srclib\bzip2 \ - $(TOPDIR)\srclib\openssl \ $(TOPDIR)\srclib\zlib \ $(TOPDIR)\srclib\zlib\win32 @@ -150,7 +150,7 @@ LIBSOURCES=\ $(TOPDIR)\shared\buildmark.c SSLSOURCES=\ - $(TOPDIR)\srclib\openssl\api.c + $(TOPDIR)\modules\openssl\api.c CXXSOURCES= Modified: commons/sandbox/runtime/trunk/src/main/native/Makefile.unx.in URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/Makefile.unx.in?rev=1159735&r1=1159734&r2=1159735&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/Makefile.unx.in (original) +++ commons/sandbox/runtime/trunk/src/main/native/Makefile.unx.in Fri Aug 19 18:34:27 2011 @@ -21,10 +21,10 @@ include @topdir@/Makedefs SRCDIRS=\ $(TOPDIR)/os/$(HOSTSRC) \ $(TOPDIR)/os/unix \ + $(TOPDIR)/modules/openssl \ $(TOPDIR)/port \ $(TOPDIR)/shared \ $(TOPDIR)/srclib/bzip2 \ - $(TOPDIR)/srclib/openssl \ $(TOPDIR)/srclib/zlib \ $(TOPDIR)/srclib/zlib/unix @@ -145,7 +145,7 @@ LIBSOURCES=\ $(TOPDIR)/shared/buildmark.c SSLSOURCES=\ - $(TOPDIR)/srclib/openssl/api.c + $(TOPDIR)/modules/openssl/api.c CXXSOURCES= Modified: commons/sandbox/runtime/trunk/src/main/native/include/acr/descriptor.h URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr/descriptor.h?rev=1159735&r1=1159734&r2=1159735&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/include/acr/descriptor.h (original) +++ commons/sandbox/runtime/trunk/src/main/native/include/acr/descriptor.h Fri Aug 19 18:34:27 2011 @@ -18,6 +18,7 @@ #define _ACR_DESCRIPTOR_H #include "acr/jniapi.h" +#include "acr/memory.h" /** * Socket flags Added: commons/sandbox/runtime/trunk/src/main/native/modules/openssl/api.c URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/modules/openssl/api.c?rev=1159735&view=auto ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/modules/openssl/api.c (added) +++ commons/sandbox/runtime/trunk/src/main/native/modules/openssl/api.c Fri Aug 19 18:34:27 2011 @@ -0,0 +1,133 @@ +/* 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 "acr/clazz.h" +#include "acr/error.h" +#include "acr/misc.h" +#include "acr/dso.h" +#include "arch_sync.h" +#include "acr/ssl.h" + +#if !HAVE_OPENSSL +#error "Cannot compile this file without HAVE_OPENSSL defined" +#endif + +#if defined(WINDOWS) +#define SSL_DSO_NAME L"ssleay32.dll" +#define CRYPTO_DSO_NAME L"libeay32.dll" +#else +#define SSL_DSO_NAME "libssl" PACKAGE_DLLEXT +#define CRYPTO_DSO_NAME "libcrypto" PACKAGE_DLLEXT +#endif + +#if HAVE_OPENSSL_STATIC + +ACR_JNI_EXPORT(jboolean, Native, ldopenssl0)(JNI_STDARGS) +{ + return JNI_TRUE; +} + +#else /* !HAVE_OPENSSL_STATIC */ +/** + * Dynamic OpenSSL API loader + */ + +#define LIBSSL_FPLOAD(fN) \ + fname = #fN; \ + SSLapi.fp##fN = AcrGetProcAddress(libssldso, fname); \ + if (SSLapi.fp##fN == 0) goto failed + +#define CRYPTO_FPLOAD(fN) \ + fname = #fN; \ + SSLapi.fp##fN = AcrGetProcAddress(cryptodso, fname); \ + if (SSLapi.fp##fN == 0) goto failed + +#define SSLAPI_LINK(fN) (*SSLapi.fp##fN) + +struct SSLAPIst { + unsigned long (*fpSSLeay)(void); + const char* (*fpSSLeay_version)(int); + + SSL_CTX* (*fpSSL_CTX_new)(const SSL_METHOD *); + void (*fpSSL_CTX_free)(SSL_CTX *); + +}; + +static struct SSLAPIst SSLapi; +static acr_dso_t libssldso; +static acr_dso_t cryptodso; + +ACR_JNI_EXPORT(jboolean, Native, ldopenssl0)(JNI_STDARGS) +{ + char b[512]; + const char *fname = ""; + const char *dname = SSL_DSO_NAME; + + if ((cryptodso = AcrDsoLoad(CRYPTO_DSO_NAME)) == 0) { + ACR_THROW_SYS_ERRNO(); + return JNI_FALSE; + } + if ((libssldso = AcrDsoLoad(SSL_DSO_NAME)) == 0) { + ACR_THROW_SYS_ERRNO(); + return JNI_FALSE; + } + LIBSSL_FPLOAD(SSLeay); + LIBSSL_FPLOAD(SSLeay_version); + if (SSLeay() < 0x00908000L) { + AcrThrow(env, ACR_EX_ERUNTIME, + "OpenSSL 0.9.8 or greater is required"); + return JNI_FALSE; + } + LIBSSL_FPLOAD(SSL_CTX_new); + LIBSSL_FPLOAD(SSL_CTX_free); + + return JNI_TRUE; +failed: + snprintf(b, sizeof(b), "Cannot find %s::%s()", dname, fname); + AcrThrow(env, ACR_EX_ENOENT, b); + return JNI_FALSE; +} + +/* Dynamic OpenSSL library wrappers + * This allows to dynamically link to libssl.so and libcrypto.so + * while preserving statically linked API. + * + * Wrappers are currently manually maintained, so if any + * additional OpenSSL function is used it has to be added + * to the SSLapi struct and locally declared. + * + */ +unsigned long SSLeay() +{ + return SSLAPI_LINK(SSLeay)(); +} + +const char *SSLeay_version(int type) +{ + return SSLAPI_LINK(SSLeay_version)(type); +} + +SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth) +{ + return SSLAPI_LINK(SSL_CTX_new)(meth); +} + +void SSL_CTX_free(SSL_CTX *ctx) +{ + SSLAPI_LINK(SSL_CTX_free)(ctx); +} + +#endif /* HAVE_OPENSSL_STATIC */ Propchange: commons/sandbox/runtime/trunk/src/main/native/modules/openssl/api.c ------------------------------------------------------------------------------ svn:eol-style = native Modified: commons/sandbox/runtime/trunk/src/main/native/os/unix/arch_sync.h URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/arch_sync.h?rev=1159735&r1=1159734&r2=1159735&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/os/unix/arch_sync.h (original) +++ commons/sandbox/runtime/trunk/src/main/native/os/unix/arch_sync.h Fri Aug 19 18:34:27 2011 @@ -18,15 +18,76 @@ #define _ACR_ARCH_SYNC_H_ #include "acr/stddefs.h" +#include "acr/descriptor.h" #if defined(_SOLARIS) #include <atomic.h> #endif +#if !defined(PTHREAD_MUTEX_RECURSIVE) +#define PTHREAD_MUTEX_RECURSIVE 1 +#endif +typedef pthread_mutex_t acr_mutex_t; + #ifdef __cplusplus extern "C" { #endif +ACR_INLINE(int) AcrThreadMutexInit(acr_mutex_t *mutex) +{ + int rc; +#if defined(PTHREAD_MUTEX_RECURSIVE) + pthread_mutexattr_t mattr; +#endif + +#if defined(PTHREAD_MUTEX_RECURSIVE) + if ((rc = pthread_mutexattr_init(&mattr))) + return rc; + rc = pthread_mutexattr_settype(&mattr, PTHREAD_MUTEX_RECURSIVE); + if (rc) { + pthread_mutexattr_destroy(&mattr); + return rc; + } + rc = pthread_mutex_init(mutex, &mattr); + pthread_mutexattr_destroy(&mattr); +#else + rc = pthread_mutex_init(mutex, 0); +#endif + return rc; +} + +ACR_INLINE(int) AcrThreadMutexCreate(acr_mutex_t **mutex) +{ + int rc; + acr_mutex_t *m; + + if ((m = malloc(sizeof(acr_mutex_t))) == 0) + return ACR_ENOMEM; + if ((rc = AcrThreadMutexInit(m)) != 0) + free(m); + else + *mutex = m; + return rc; +} + +ACR_INLINE(void) AcrTreadMutexDestroy(acr_mutex_t *mutex) +{ + if (mutex != 0) + pthread_mutex_destroy(mutex); +} + +ACR_INLINE(void) AcrTreadMutexLock(acr_mutex_t *mutex) +{ + if (mutex != 0) + pthread_mutex_lock(mutex); +} + +ACR_INLINE(void) AcrTreadMutexUnlock(acr_mutex_t *mutex) +{ + if (mutex != 0) + pthread_mutex_unlock(mutex); +} + #if defined(__GNUC__) # if (__GNUC__ >= 4) && (__GNUC_MINOR__ >= 1) # else Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/arch_sync.h URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/arch_sync.h?rev=1159735&r1=1159734&r2=1159735&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/os/win32/arch_sync.h (original) +++ commons/sandbox/runtime/trunk/src/main/native/os/win32/arch_sync.h Fri Aug 19 18:34:27 2011 @@ -18,6 +18,7 @@ #define _ACR_ARCH_SYNC_H_ #include "acr/stddefs.h" +#include "acr/descriptor.h" #if HAVE_INTRIN_H # include <intrin.h> @@ -31,6 +32,51 @@ #define USE_ATOMICS_WRAPPER 0 #define USE_BUILTIN_ATOMICS 1 +typedef CRITICAL_SECTION acr_mutex_t; + +#ifdef __cplusplus +extern "C" { +#endif + +ACR_INLINE(int) AcrThreadMutexInit(acr_mutex_t *mutex) +{ + InitializeCriticalSectionAndSpinCount(mutex, 4000); + return 0; +} + +ACR_INLINE(int) AcrThreadMutexCreate(acr_mutex_t **mutex) +{ + int rc; + acr_mutex_t *m; + + if ((m = malloc(sizeof(acr_mutex_t))) == 0) + return ACR_ENOMEM; + if ((rc = AcrThreadMutexInit(m)) != 0) + free(m); + else + *mutex = m; + return rc; +} + +ACR_INLINE(void) AcrTreadMutexDestroy(acr_mutex_t *mutex) +{ + if (mutex != 0) + DeleteCriticalSection(mutex); +} + +ACR_INLINE(void) AcrTreadMutexLock(acr_mutex_t *mutex) +{ + if (mutex != 0) + EnterCriticalSection(mutex); +} + +ACR_INLINE(void) AcrTreadMutexUnlock(acr_mutex_t *mutex) +{ + if (mutex != 0) + LeaveCriticalSection(mutex); +} + + ACR_INLINE(void) AcrCpuFence() { _PR_COMPILER_FENCE(); @@ -98,4 +144,7 @@ ACR_INLINE(int) AcrSdRelease(acr_sd_t return 1; } +#ifdef __cplusplus +} +#endif #endif /* _ACR_ARCH_SYNC_H_ */