From f461027896e3f969798c95651cec0b57ff0f0269 Mon Sep 17 00:00:00 2001 From: Arne Schwabe Date: Tue, 4 Dec 2018 17:11:31 +0100 Subject: Support new OpenVPN3 version with OpenSSL and print OpenVPN versions --- main/src/main/cpp/CMakeLists.txt | 25 +++++++++++--- main/src/main/cpp/opvpnutil/jniglue.c | 12 +++++++ .../main/java/de/blinkt/openvpn/VpnProfile.java | 5 ++- .../java/de/blinkt/openvpn/core/NativeUtils.java | 5 +++ .../de/blinkt/openvpn/fragments/AboutFragment.java | 6 +++- main/src/main/res/layout/about.xml | 17 +++++++++- .../de/blinkt/openvpn/core/OpenVPNThreadv3.java | 39 +++++++++------------- 7 files changed, 77 insertions(+), 32 deletions(-) diff --git a/main/src/main/cpp/CMakeLists.txt b/main/src/main/cpp/CMakeLists.txt index 24b13f3a..8b22a82a 100644 --- a/main/src/main/cpp/CMakeLists.txt +++ b/main/src/main/cpp/CMakeLists.txt @@ -15,6 +15,9 @@ OPTION(ENABLE_TESTING "" OFF) # Own options OPTION(OPENVPN2MBED "Use mbed TLS for OpenVPN2" OFF) +OPTION(OPENVPN3OSSL "Use OpenSSL for OpenVPN3" ON) +SET(OPENVPN3OSSL ON) + #add_subdirectory(lzo) include(tools.cmake) @@ -61,26 +64,38 @@ if (NOT ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} MATCHES "build/intermediates/cmake/.*n ${CMAKE_CURRENT_SOURCE_DIR}/mbedtls/include ) - target_compile_options(ovpn3 PRIVATE -std=c++1y) + if (${OPENVPN3OSSL}) + target_compile_definitions(ovpn3 PRIVATE + -DUSE_OPENSSL + ) + target_link_libraries(ovpn3 crypto ssl lzo lz4) + else() + target_compile_definitions(ovpn3 PRIVATE + -DUSE_MBEDTLS + ) + target_link_libraries(ovpn3 mbedtls mbedx509 mbedcrypto lzo lz4) + endif() + + target_compile_options(ovpn3 PRIVATE -std=c++1y) target_compile_definitions(ovpn3 PRIVATE -DHAVE_CONFIG_H -DHAVE_LZO -DHAVE_LZ4 -DASIO_STANDALONE -DUSE_ASIO - -DUSE_MBEDTLS -DGIT_VERSION_STRING=\"${OPENVPN3_GIT}\" -DNO_ROUTE_EXCLUDE_EMULATION -DOPENVPN_SHOW_SESSION_TOKEN - -DASIO_HAS_STD_STRING_VIEW ) - target_link_libraries(ovpn3 mbedtls mbedx509 mbedcrypto lzo lz4) else() message ("Not budiling OpenVPN for output dir ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") endif() add_library(opvpnutil SHARED opvpnutil/jniglue.c opvpnutil/scan_ifs.c opvpnutil/sslspeed.c) -target_compile_definitions(opvpnutil PRIVATE -DTARGET_ARCH_ABI=\"${ANDROID_ABI}\") +target_compile_definitions(opvpnutil PRIVATE -DTARGET_ARCH_ABI=\"${ANDROID_ABI}\" + -DOPENVPN2_GIT_REVISION=\"${OPENVPN2_GIT}\" + -DOPENVPN3_GIT_REVISION=\"${OPENVPN3_GIT}\" + ) target_link_libraries(opvpnutil log crypto ssl) # The magic Jellybean keystore signing hack. Beware dragons and dlsyms magic ahead diff --git a/main/src/main/cpp/opvpnutil/jniglue.c b/main/src/main/cpp/opvpnutil/jniglue.c index b0c6c704..264b18a8 100644 --- a/main/src/main/cpp/opvpnutil/jniglue.c +++ b/main/src/main/cpp/opvpnutil/jniglue.c @@ -31,3 +31,15 @@ jstring Java_de_blinkt_openvpn_core_NativeUtils_getJNIAPI(JNIEnv *env, jclass jo return (*env)->NewStringUTF(env, TARGET_ARCH_ABI); } + +jstring Java_de_blinkt_openvpn_core_NativeUtils_getOpenVPN2GitVersion(JNIEnv *env, jclass jo) +{ + + return (*env)->NewStringUTF(env, OPENVPN2_GIT_REVISION); +} + +jstring Java_de_blinkt_openvpn_core_NativeUtils_getOpenVPN3GitVersion(JNIEnv *env, jclass jo) +{ + + return (*env)->NewStringUTF(env, OPENVPN3_GIT_REVISION); +} diff --git a/main/src/main/java/de/blinkt/openvpn/VpnProfile.java b/main/src/main/java/de/blinkt/openvpn/VpnProfile.java index a715805d..85ee6807 100644 --- a/main/src/main/java/de/blinkt/openvpn/VpnProfile.java +++ b/main/src/main/java/de/blinkt/openvpn/VpnProfile.java @@ -551,7 +551,10 @@ public class VpnProfile implements Serializable, Cloneable { if (mMssFix != 0) { if (mMssFix != 1450) { - cfg.append(String.format(Locale.US, "mssfix %d\n", mMssFix)); + if (configForOvpn3) + cfg.append(String.format(Locale.US, "mssfix %d mtu\n", mMssFix)); + else + cfg.append(String.format(Locale.US, "mssfix %d\n", mMssFix)); } else cfg.append("mssfix\n"); } diff --git a/main/src/main/java/de/blinkt/openvpn/core/NativeUtils.java b/main/src/main/java/de/blinkt/openvpn/core/NativeUtils.java index 6b633c34..4e22189a 100644 --- a/main/src/main/java/de/blinkt/openvpn/core/NativeUtils.java +++ b/main/src/main/java/de/blinkt/openvpn/core/NativeUtils.java @@ -26,6 +26,9 @@ public class NativeUtils { private static native String getJNIAPI(); + public static native String getOpenVPN2GitVersion(); + + public static native String getOpenVPN3GitVersion(); public final static int[] openSSLlengths = { 16, 64, 256, 1024, 8 * 1024, 16 * 1024 @@ -44,4 +47,6 @@ public class NativeUtils { public static boolean isRoboUnitTest() { return "robolectric".equals(Build.FINGERPRINT); } + + } diff --git a/main/src/main/java/de/blinkt/openvpn/fragments/AboutFragment.java b/main/src/main/java/de/blinkt/openvpn/fragments/AboutFragment.java index 4fce6eaa..540f4a9a 100644 --- a/main/src/main/java/de/blinkt/openvpn/fragments/AboutFragment.java +++ b/main/src/main/java/de/blinkt/openvpn/fragments/AboutFragment.java @@ -30,6 +30,7 @@ import android.widget.TextView; import com.android.vending.billing.IInAppBillingService; +import de.blinkt.openvpn.core.NativeUtils; import org.json.JSONException; import org.json.JSONObject; @@ -269,10 +270,13 @@ public class AboutFragment extends Fragment implements View.OnClickListener { version = "error fetching version"; } - ver.setText(getString(R.string.version_info, name, version)); + TextView verO2 = v.findViewById(R.id.version_ovpn2); + TextView verO3 = v.findViewById(R.id.version_ovpn3); + verO2.setText(String.format(Locale.US, "OpenVPN version: %s", NativeUtils.getOpenVPN2GitVersion())); + verO3.setText(String.format(Locale.US, "OpenVPN3 core version: %s", NativeUtils.getOpenVPN3GitVersion())); gmsTextView = (TextView) v.findViewById(R.id.donategms); /* recreating view without onCreate/onDestroy cycle */ diff --git a/main/src/main/res/layout/about.xml b/main/src/main/res/layout/about.xml index 2ab9a4f3..8b40520b 100644 --- a/main/src/main/res/layout/about.xml +++ b/main/src/main/res/layout/about.xml @@ -19,6 +19,7 @@ + android:layout_height="6sp" /> + + + +