Skip to content

Commit d56fa67

Browse files
Merge pull request #246 from cconlon/socketCloseInterruptsWriteRead
JSSE: calling SSLSocket.close() should interrupt threads blocked in select()/poll()
2 parents f5c9289 + cd8c49e commit d56fa67

13 files changed

Lines changed: 971 additions & 108 deletions

File tree

.github/workflows/linux-common.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ on:
1515
wolfssl_configure:
1616
required: true
1717
type: string
18+
javash_cflags:
19+
required: false
20+
type: string
1821

1922
jobs:
2023
build_wolfssljni:
@@ -51,7 +54,7 @@ jobs:
5154
echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$GITHUB_WORKSPACE/build-dir/lib" >> "$GITHUB_ENV"
5255
5356
- name: Build JNI library
54-
run: ./java.sh $GITHUB_WORKSPACE/build-dir
57+
run: CFLAGS=${{ inputs.javah_cflags }} ./java.sh $GITHUB_WORKSPACE/build-dir
5558
- name: Build JAR (ant)
5659
run: ant
5760
- name: Run Java tests (ant test)

.github/workflows/main.yml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,27 @@ jobs:
120120
jdk_version: ${{ matrix.jdk_version }}
121121
wolfssl_configure: ${{ matrix.wolfssl_configure }}
122122

123+
# -------------------- WOLFJNI_USE_IO_SELECT sanity check --------------------
124+
# Only check one Linux and Mac JDK version as a sanity check.
125+
# Using Zulu, but this can be expanded if needed.
126+
linux-zulu-ioselect:
127+
strategy:
128+
matrix:
129+
os: [ 'ubuntu-latest', 'macos-latest' ]
130+
jdk_version: [ '11' ]
131+
wolfssl_configure: [
132+
'--enable-jni',
133+
]
134+
javash_cflags: [ '-DWOLFJNI_USE_IO_SELECT' ]
135+
name: ${{ matrix.os }} (Zulu JDK ${{ matrix.jdk_version }}, ${{ matrix.wolfssl_configure}}, ${{ matrix.javash_cflags }})
136+
uses: ./.github/workflows/linux-common.yml
137+
with:
138+
os: ${{ matrix.os }}
139+
jdk_distro: "zulu"
140+
jdk_version: ${{ matrix.jdk_version }}
141+
wolfssl_configure: ${{ matrix.wolfssl_configure }}
142+
javash_cflags: ${{ matrix.javash_cflags }}
143+
123144
# ------------------ Facebook Infer static analysis -------------------
124145
# Run Facebook infer over PR code, only running on Linux with one
125146
# JDK/version for now.

README.md

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,44 @@ $ ./examples/provider/ServerJSSE.sh
108108
$ ./examples/provider/ClientJSSE.sh
109109
```
110110

111+
### java.sh Script Options
112+
113+
The `java.sh` script compiles the native JNI sources into a shared library named
114+
either `libwolfssljni.so` (Linux/Unix) or `libwolfssljni.dylib` (MacOS).
115+
Compiling on Linux/Unix and Mac OSX are currently supported.
116+
117+
This script will attempt to auto-detect the `JAVA_HOME` location if not set.
118+
To explicitly use a Java home location, set the `JAVA_HOME` environment variable
119+
prior to running this script.
120+
121+
This script will try to link against a wolfSSL library installed to the
122+
default location of `/usr/local`. This script accepts two arguments on the
123+
command line. The first argument can point to a custom wolfSSL installation
124+
location. A custom install location would match the directory set at wolfSSL
125+
`./configure --prefix=<DIR>`.
126+
127+
The second argument represents the wolfSSL library name that should be
128+
linked against. This is helpful if a non-standard library name has been
129+
used with wolfSSL, for example the `./configure --with-libsuffix` option
130+
has been used to add a suffix to the wolfSSL library name. Note that to
131+
use this argument, an installation location must be specified via the
132+
first argument.
133+
134+
For example, if wolfSSL was configured with `--with-libsuffix=jsse`, then
135+
this script could be called like so using the default installation
136+
path of `/usr/local`:
137+
138+
```
139+
java.sh /usr/local wolfssljsse
140+
```
141+
142+
`java.sh` can use preset `CFLAGS` defines, if set in the environment variable
143+
prior to running the script, for example:
144+
145+
```
146+
CFLAGS=-DWOLFJNI_USE_IO_SELECT java.sh
147+
```
148+
111149
## Building with Maven
112150

113151
wolfJSSE supports building and packaging with Maven, for those projects that

java.sh

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,6 @@ if [ "$OS" == "Darwin" ] ; then
7575
javaIncludes="-I$javaHome/include -I$javaHome/include/darwin -I$WOLFSSL_INSTALL_DIR/include"
7676
javaLibs="-dynamiclib"
7777
jniLibName="libwolfssljni.dylib"
78-
cflags=""
7978
elif [ "$OS" == "Linux" ] ; then
8079
echo " Detected Linux host OS"
8180
if [ -z $javaHome ]; then
@@ -88,7 +87,6 @@ elif [ "$OS" == "Linux" ] ; then
8887
javaIncludes="-I$javaHome/include -I$javaHome/include/linux -I$WOLFSSL_INSTALL_DIR/include"
8988
javaLibs="-shared"
9089
jniLibName="libwolfssljni.so"
91-
cflags=""
9290
if [ "$ARCH" == "x86_64" ] ; then
9391
fpic="-fPIC"
9492
else
@@ -108,18 +106,18 @@ then
108106
mkdir ./lib
109107
fi
110108

111-
gcc -Wall -c $fpic $cflags ./native/com_wolfssl_WolfSSL.c -o ./native/com_wolfssl_WolfSSL.o $javaIncludes
112-
gcc -Wall -c $fpic $cflags ./native/com_wolfssl_WolfSSLSession.c -o ./native/com_wolfssl_WolfSSLSession.o $javaIncludes
113-
gcc -Wall -c $fpic $cflags ./native/com_wolfssl_WolfSSLContext.c -o ./native/com_wolfssl_WolfSSLContext.o $javaIncludes
114-
gcc -Wall -c $fpic $cflags ./native/com_wolfssl_wolfcrypt_RSA.c -o ./native/com_wolfssl_wolfcrypt_RSA.o $javaIncludes
115-
gcc -Wall -c $fpic $cflags ./native/com_wolfssl_wolfcrypt_ECC.c -o ./native/com_wolfssl_wolfcrypt_ECC.o $javaIncludes
116-
gcc -Wall -c $fpic $cflags ./native/com_wolfssl_wolfcrypt_EccKey.c -o ./native/com_wolfssl_wolfcrypt_EccKey.o $javaIncludes
117-
gcc -Wall -c $fpic $cflags ./native/com_wolfssl_WolfSSLCertManager.c -o ./native/com_wolfssl_WolfSSLCertManager.o $javaIncludes
118-
gcc -Wall -c $fpic $cflags ./native/com_wolfssl_WolfSSLCertRequest.c -o ./native/com_wolfssl_WolfSSLCertRequest.o $javaIncludes
119-
gcc -Wall -c $fpic $cflags ./native/com_wolfssl_WolfSSLCertificate.c -o ./native/com_wolfssl_WolfSSLCertificate.o $javaIncludes
120-
gcc -Wall -c $fpic $cflags ./native/com_wolfssl_WolfSSLX509Name.c -o ./native/com_wolfssl_WolfSSLX509Name.o $javaIncludes
121-
gcc -Wall -c $fpic $cflags ./native/com_wolfssl_WolfSSLX509StoreCtx.c -o ./native/com_wolfssl_WolfSSLX509StoreCtx.o $javaIncludes
122-
gcc -Wall $javaLibs $cflags -o ./lib/$jniLibName ./native/com_wolfssl_WolfSSL.o ./native/com_wolfssl_WolfSSLSession.o ./native/com_wolfssl_WolfSSLContext.o ./native/com_wolfssl_wolfcrypt_RSA.o ./native/com_wolfssl_wolfcrypt_ECC.o ./native/com_wolfssl_wolfcrypt_EccKey.o ./native/com_wolfssl_WolfSSLCertManager.o ./native/com_wolfssl_WolfSSLCertRequest.o ./native/com_wolfssl_WolfSSLCertificate.o ./native/com_wolfssl_WolfSSLX509Name.o ./native/com_wolfssl_WolfSSLX509StoreCtx.o -L$WOLFSSL_INSTALL_DIR/lib -L$WOLFSSL_INSTALL_DIR/lib64 -l$WOLFSSL_LIBNAME
109+
gcc -Wall -c $fpic $CFLAGS ./native/com_wolfssl_WolfSSL.c -o ./native/com_wolfssl_WolfSSL.o $javaIncludes
110+
gcc -Wall -c $fpic $CFLAGS ./native/com_wolfssl_WolfSSLSession.c -o ./native/com_wolfssl_WolfSSLSession.o $javaIncludes
111+
gcc -Wall -c $fpic $CFLAGS ./native/com_wolfssl_WolfSSLContext.c -o ./native/com_wolfssl_WolfSSLContext.o $javaIncludes
112+
gcc -Wall -c $fpic $CFLAGS ./native/com_wolfssl_wolfcrypt_RSA.c -o ./native/com_wolfssl_wolfcrypt_RSA.o $javaIncludes
113+
gcc -Wall -c $fpic $CFLAGS ./native/com_wolfssl_wolfcrypt_ECC.c -o ./native/com_wolfssl_wolfcrypt_ECC.o $javaIncludes
114+
gcc -Wall -c $fpic $CFLAGS ./native/com_wolfssl_wolfcrypt_EccKey.c -o ./native/com_wolfssl_wolfcrypt_EccKey.o $javaIncludes
115+
gcc -Wall -c $fpic $CFLAGS ./native/com_wolfssl_WolfSSLCertManager.c -o ./native/com_wolfssl_WolfSSLCertManager.o $javaIncludes
116+
gcc -Wall -c $fpic $CFLAGS ./native/com_wolfssl_WolfSSLCertRequest.c -o ./native/com_wolfssl_WolfSSLCertRequest.o $javaIncludes
117+
gcc -Wall -c $fpic $CFLAGS ./native/com_wolfssl_WolfSSLCertificate.c -o ./native/com_wolfssl_WolfSSLCertificate.o $javaIncludes
118+
gcc -Wall -c $fpic $CFLAGS ./native/com_wolfssl_WolfSSLX509Name.c -o ./native/com_wolfssl_WolfSSLX509Name.o $javaIncludes
119+
gcc -Wall -c $fpic $CFLAGS ./native/com_wolfssl_WolfSSLX509StoreCtx.c -o ./native/com_wolfssl_WolfSSLX509StoreCtx.o $javaIncludes
120+
gcc -Wall $javaLibs $CFLAGS -o ./lib/$jniLibName ./native/com_wolfssl_WolfSSL.o ./native/com_wolfssl_WolfSSLSession.o ./native/com_wolfssl_WolfSSLContext.o ./native/com_wolfssl_wolfcrypt_RSA.o ./native/com_wolfssl_wolfcrypt_ECC.o ./native/com_wolfssl_wolfcrypt_EccKey.o ./native/com_wolfssl_WolfSSLCertManager.o ./native/com_wolfssl_WolfSSLCertRequest.o ./native/com_wolfssl_WolfSSLCertificate.o ./native/com_wolfssl_WolfSSLX509Name.o ./native/com_wolfssl_WolfSSLX509StoreCtx.o -L$WOLFSSL_INSTALL_DIR/lib -L$WOLFSSL_INSTALL_DIR/lib64 -l$WOLFSSL_LIBNAME
123121
if [ $? != 0 ]; then
124122
echo "Error creating native JNI library"
125123
exit 1

0 commit comments

Comments
 (0)