Skip to content

Commit

Permalink
- enhanced JNI extension functionality
Browse files Browse the repository at this point in the history
  • Loading branch information
Patryk Nadrowski committed Mar 17, 2020
1 parent 4c2d730 commit 8661e6e
Show file tree
Hide file tree
Showing 40 changed files with 1,305 additions and 77 deletions.
2 changes: 1 addition & 1 deletion depend/curl/build.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import os
import shutil

libraryVersion = '7.67.0'
libraryVersion = '7.69.1'
libraryName = 'curl-' + libraryVersion

buildCommonFile = os.path.join('..', '..', 'script', 'build_common.py')
Expand Down
4 changes: 4 additions & 0 deletions example/01.HelloWorld/HelloWorld.cpp
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
// Copyright (C) 2017-2020 Grupa Pracuj Sp. z o.o.
// This file is part of the "Hermes" library.
// For conditions of distribution and use, see copyright notice in license.txt.

#include "HelloWorld.hpp"

UserData::UserData(size_t pId) : hms::DataShared(pId)
Expand Down
4 changes: 4 additions & 0 deletions example/01.HelloWorld/HelloWorld.hpp
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
// Copyright (C) 2017-2020 Grupa Pracuj Sp. z o.o.
// This file is part of the "Hermes" library.
// For conditions of distribution and use, see copyright notice in license.txt.

#ifndef _HELLO_WORLD_HPP_
#define _HELLO_WORLD_HPP_

Expand Down
4 changes: 4 additions & 0 deletions example/01.HelloWorld/Main.cpp
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
// Copyright (C) 2017-2020 Grupa Pracuj Sp. z o.o.
// This file is part of the "Hermes" library.
// For conditions of distribution and use, see copyright notice in license.txt.

#include "HelloWorld.hpp"

int main(int pArgumentsCount, char* pArguments[])
Expand Down
38 changes: 36 additions & 2 deletions example/01.HelloWorld/certificate.pem
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
##
## Bundle of CA Root Certificates
##
## Certificate data from Mozilla as of: Wed Oct 16 03:12:09 2019 GMT
## Certificate data from Mozilla as of: Wed Jan 1 04:12:10 2020 GMT
##
## This is a bundle of X.509 certificates of public Certificate Authorities
## (CA). These were automatically extracted from Mozilla's root certificates
Expand All @@ -14,7 +14,7 @@
## Just configure this file as the SSLCACertificateFile.
##
## Conversion done with mk-ca-bundle.pl version 1.27.
## SHA256: c979c6f35714a0fedb17d9e5ba37adecbbc91a8faf4186b4e23d6f9ca44fd6cb
## SHA256: f3bdcd74612952da8476a9d4147f50b29ad0710b7dd95b4c8690500209986d70
##


Expand Down Expand Up @@ -3430,3 +3430,37 @@ hcErulWuBurQB7Lcq9CClnXO0lD+mefPL5/ndtFhKvshuzHQqp9HpLIiyhY6UFfEW0NnxWViA0kB
60PZ2Pierc+xYw5F9KBaLJstxabArahH9CdMOA0uG0k7UvToiIMrVCjU8jVStDKDYmlkDJGcn5fq
dBb9HxEGmpv0
-----END CERTIFICATE-----

Entrust Root Certification Authority - G4
=========================================
-----BEGIN CERTIFICATE-----
MIIGSzCCBDOgAwIBAgIRANm1Q3+vqTkPAAAAAFVlrVgwDQYJKoZIhvcNAQELBQAwgb4xCzAJBgNV
BAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3Qu
bmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1
dGhvcml6ZWQgdXNlIG9ubHkxMjAwBgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1
dGhvcml0eSAtIEc0MB4XDTE1MDUyNzExMTExNloXDTM3MTIyNzExNDExNlowgb4xCzAJBgNVBAYT
AlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0
L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhv
cml6ZWQgdXNlIG9ubHkxMjAwBgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhv
cml0eSAtIEc0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsewsQu7i0TD/pZJH4i3D
umSXbcr3DbVZwbPLqGgZ2K+EbTBwXX7zLtJTmeH+H17ZSK9dE43b/2MzTdMAArzE+NEGCJR5WIoV
3imz/f3ET+iq4qA7ec2/a0My3dl0ELn39GjUu9CH1apLiipvKgS1sqbHoHrmSKvS0VnM1n4j5pds
8ELl3FFLFUHtSUrJ3hCX1nbB76W1NhSXNdh4IjVS70O92yfbYVaCNNzLiGAMC1rlLAHGVK/XqsEQ
e9IFWrhAnoanw5CGAlZSCXqc0ieCU0plUmr1POeo8pyvi73TDtTUXm6Hnmo9RR3RXRv06QqsYJn7
ibT/mCzPfB3pAqoEmh643IhuJbNsZvc8kPNXwbMv9W3y+8qh+CmdRouzavbmZwe+LGcKKh9asj5X
xNMhIWNlUpEbsZmOeX7m640A2Vqq6nPopIICR5b+W45UYaPrL0swsIsjdXJ8ITzI9vF01Bx7owVV
7rtNOzK+mndmnqxpkCIHH2E6lr7lmk/MBTwoWdPBDFSoWWG9yHJM6Nyfh3+9nEg2XpWjDrk4JFX8
dWbrAuMINClKxuMrLzOg2qOGpRKX/YAr2hRC45K9PvJdXmd0LhyIRyk0X+IyqJwlN4y6mACXi0mW
Hv0liqzc2thddG5msP9E36EYxr5ILzeUePiVSj9/E15dWf10hkNjc0kCAwEAAaNCMEAwDwYDVR0T
AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJ84xFYjwznooHFs6FRM5Og6sb9n
MA0GCSqGSIb3DQEBCwUAA4ICAQAS5UKme4sPDORGpbZgQIeMJX6tuGguW8ZAdjwD+MlZ9POrYs4Q
jbRaZIxowLByQzTSGwv2LFPSypBLhmb8qoMi9IsabyZIrHZ3CL/FmFz0Jomee8O5ZDIBf9PD3Vht
7LGrhFV0d4QEJ1JrhkzO3bll/9bGXp+aEJlLdWr+aumXIOTkdnrG0CSqkM0gkLpHZPt/B7NTeLUK
YvJzQ85BK4FqLoUWlFPUa19yIqtRLULVAJyZv967lDtX/Zr1hstWO1uIAeV8KEsD+UmDfLJ/fOPt
jqF/YFOOVZ1QNBIPt5d7bIdKROf1beyAN/BYGW5KaHbwH5Lk6rWS02FREAutp9lfx1/cH6NcjKF+
m7ee01ZvZl4HliDtC3T7Zk6LERXpgUl+b7DUUH8i119lAg2m9IUe2K4GS0qn0jFmwvjO5QimpAKW
RGhXxNUzzxkvFMSUHHuk2fCfDrGA4tGeEWSpiBE6doLlYsKA2KSD7ZPvfC+QsDJMlhVoSFLUmQjA
JOgc47OlIQ6SwJAfzyBfyjs4x7dtOvPmRLgOMWuIjnDrnBdSqEGULoe256YSxXXfW8AKbnuk5F6G
+TaU33fD6Q3AOfF5u0aOq0NZJ7cguyPpVkAh7DE9ZapD8j3fcEThuk0mEDuYn/PIjhs4ViFqUZPT
kcpG2om3PVODLAgfi49T3f+sHw==
-----END CERTIFICATE-----
6 changes: 4 additions & 2 deletions example/01.HelloWorld_Android/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,10 @@ android {
}
}

task copyJavaHermesExt(type: Copy) {
task copyHermesExt(type: Copy) {
from "../../ext/java/"
into "source/java/"
}
preBuild.dependsOn copyJavaHermesExt
project.afterEvaluate {
preBuild.dependsOn copyHermesExt
}
38 changes: 36 additions & 2 deletions example/01.HelloWorld_Android/resources/assets/certificate.pem
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
##
## Bundle of CA Root Certificates
##
## Certificate data from Mozilla as of: Wed Oct 16 03:12:09 2019 GMT
## Certificate data from Mozilla as of: Wed Jan 1 04:12:10 2020 GMT
##
## This is a bundle of X.509 certificates of public Certificate Authorities
## (CA). These were automatically extracted from Mozilla's root certificates
Expand All @@ -14,7 +14,7 @@
## Just configure this file as the SSLCACertificateFile.
##
## Conversion done with mk-ca-bundle.pl version 1.27.
## SHA256: c979c6f35714a0fedb17d9e5ba37adecbbc91a8faf4186b4e23d6f9ca44fd6cb
## SHA256: f3bdcd74612952da8476a9d4147f50b29ad0710b7dd95b4c8690500209986d70
##


Expand Down Expand Up @@ -3430,3 +3430,37 @@ hcErulWuBurQB7Lcq9CClnXO0lD+mefPL5/ndtFhKvshuzHQqp9HpLIiyhY6UFfEW0NnxWViA0kB
60PZ2Pierc+xYw5F9KBaLJstxabArahH9CdMOA0uG0k7UvToiIMrVCjU8jVStDKDYmlkDJGcn5fq
dBb9HxEGmpv0
-----END CERTIFICATE-----

Entrust Root Certification Authority - G4
=========================================
-----BEGIN CERTIFICATE-----
MIIGSzCCBDOgAwIBAgIRANm1Q3+vqTkPAAAAAFVlrVgwDQYJKoZIhvcNAQELBQAwgb4xCzAJBgNV
BAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3Qu
bmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1
dGhvcml6ZWQgdXNlIG9ubHkxMjAwBgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1
dGhvcml0eSAtIEc0MB4XDTE1MDUyNzExMTExNloXDTM3MTIyNzExNDExNlowgb4xCzAJBgNVBAYT
AlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0
L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhv
cml6ZWQgdXNlIG9ubHkxMjAwBgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhv
cml0eSAtIEc0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsewsQu7i0TD/pZJH4i3D
umSXbcr3DbVZwbPLqGgZ2K+EbTBwXX7zLtJTmeH+H17ZSK9dE43b/2MzTdMAArzE+NEGCJR5WIoV
3imz/f3ET+iq4qA7ec2/a0My3dl0ELn39GjUu9CH1apLiipvKgS1sqbHoHrmSKvS0VnM1n4j5pds
8ELl3FFLFUHtSUrJ3hCX1nbB76W1NhSXNdh4IjVS70O92yfbYVaCNNzLiGAMC1rlLAHGVK/XqsEQ
e9IFWrhAnoanw5CGAlZSCXqc0ieCU0plUmr1POeo8pyvi73TDtTUXm6Hnmo9RR3RXRv06QqsYJn7
ibT/mCzPfB3pAqoEmh643IhuJbNsZvc8kPNXwbMv9W3y+8qh+CmdRouzavbmZwe+LGcKKh9asj5X
xNMhIWNlUpEbsZmOeX7m640A2Vqq6nPopIICR5b+W45UYaPrL0swsIsjdXJ8ITzI9vF01Bx7owVV
7rtNOzK+mndmnqxpkCIHH2E6lr7lmk/MBTwoWdPBDFSoWWG9yHJM6Nyfh3+9nEg2XpWjDrk4JFX8
dWbrAuMINClKxuMrLzOg2qOGpRKX/YAr2hRC45K9PvJdXmd0LhyIRyk0X+IyqJwlN4y6mACXi0mW
Hv0liqzc2thddG5msP9E36EYxr5ILzeUePiVSj9/E15dWf10hkNjc0kCAwEAAaNCMEAwDwYDVR0T
AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJ84xFYjwznooHFs6FRM5Og6sb9n
MA0GCSqGSIb3DQEBCwUAA4ICAQAS5UKme4sPDORGpbZgQIeMJX6tuGguW8ZAdjwD+MlZ9POrYs4Q
jbRaZIxowLByQzTSGwv2LFPSypBLhmb8qoMi9IsabyZIrHZ3CL/FmFz0Jomee8O5ZDIBf9PD3Vht
7LGrhFV0d4QEJ1JrhkzO3bll/9bGXp+aEJlLdWr+aumXIOTkdnrG0CSqkM0gkLpHZPt/B7NTeLUK
YvJzQ85BK4FqLoUWlFPUa19yIqtRLULVAJyZv967lDtX/Zr1hstWO1uIAeV8KEsD+UmDfLJ/fOPt
jqF/YFOOVZ1QNBIPt5d7bIdKROf1beyAN/BYGW5KaHbwH5Lk6rWS02FREAutp9lfx1/cH6NcjKF+
m7ee01ZvZl4HliDtC3T7Zk6LERXpgUl+b7DUUH8i119lAg2m9IUe2K4GS0qn0jFmwvjO5QimpAKW
RGhXxNUzzxkvFMSUHHuk2fCfDrGA4tGeEWSpiBE6doLlYsKA2KSD7ZPvfC+QsDJMlhVoSFLUmQjA
JOgc47OlIQ6SwJAfzyBfyjs4x7dtOvPmRLgOMWuIjnDrnBdSqEGULoe256YSxXXfW8AKbnuk5F6G
+TaU33fD6Q3AOfF5u0aOq0NZJ7cguyPpVkAh7DE9ZapD8j3fcEThuk0mEDuYn/PIjhs4ViFqUZPT
kcpG2om3PVODLAgfi49T3f+sHw==
-----END CERTIFICATE-----
38 changes: 7 additions & 31 deletions example/01.HelloWorld_Android/source/cpp/ActivityMain.cpp
Original file line number Diff line number Diff line change
@@ -1,36 +1,23 @@
#include "HelloWorld.hpp"
#include "ext/hmsJNI.hpp"

std::unordered_map<std::string, jclass> gClassLoader;

extern "C" JNIEXPORT jobject JNICALL Java_pl_grupapracuj_hermes_helloworld_ActivityMain_nativeCreate(JNIEnv* pEnvironment, jobject pObject, jstring pCertificatePath)
extern "C" JNIEXPORT jobject JNICALL Java_pl_grupapracuj_hermes_helloworld_ActivityMain_nativeCreate(JNIEnv* pEnvironment, jobject pObject, jobject pClassLoader, jstring pCertificatePath)
{
auto helloWorld = std::make_shared<HelloWorld>(nullptr, hms::ext::jni::Utility::string(pCertificatePath, pEnvironment));
hms::ext::jni::Utility::initialize(pEnvironment, pClassLoader);
auto helloWorld = std::make_shared<HelloWorld>(nullptr, hms::ext::jni::Utility::jconvert(pEnvironment, pCertificatePath));

return hms::ext::jni::ObjectNative::create<std::shared_ptr<HelloWorld>>(helloWorld, pEnvironment, gClassLoader["pl/grupapracuj/hermes/ext/jni/NativeObject"]);
return hms::ext::jni::Utility::convert(pEnvironment, hms::ext::jni::ObjectNativeWrapper(helloWorld));
}

extern "C" JNIEXPORT void JNICALL Java_pl_grupapracuj_hermes_helloworld_ActivityMain_nativeExecute(JNIEnv* pEnvironment, jobject pObject, jlong pHelloWorldPointer, jint pRequestIndex)
{
auto helloWorld = hms::ext::jni::ObjectNative::get<std::shared_ptr<HelloWorld>>(pHelloWorldPointer);

auto objectWeakRef = std::make_shared<hms::ext::jni::ReferenceWeak>(pObject, pEnvironment);
auto callback = [objectWeakRef](std::string lpOutputText) -> void
helloWorld->execute([objectWeakRef](std::string lpOutputText) -> void
{
JNIEnv* environment = objectWeakRef->environment();
jobject strongObject = environment->NewGlobalRef(objectWeakRef->objectWeak());
if (strongObject != nullptr)
{
jclass jClass = environment->GetObjectClass(strongObject);
jmethodID jMethod = environment->GetMethodID(jClass, "callbackExecute", "(Ljava/lang/String;)V");
jstring jOutputText = environment->NewStringUTF(lpOutputText.c_str());
environment->CallVoidMethod(strongObject, jMethod, jOutputText);
environment->DeleteLocalRef(jOutputText);
environment->DeleteGlobalRef(strongObject);
}
};

helloWorld->execute(std::move(callback), static_cast<int32_t>(pRequestIndex));
hms::ext::jni::Utility::methodVoid(objectWeakRef, "callbackExecute", "(Ljava/lang/String;)V", std::move(lpOutputText));
}, static_cast<int32_t>(pRequestIndex));
}

jint JNI_OnLoad(JavaVM* pVM, void* pReserved)
Expand All @@ -41,16 +28,5 @@ jint JNI_OnLoad(JavaVM* pVM, void* pReserved)
return -1;
}

std::array<std::string, 1> classNames = {
"pl/grupapracuj/hermes/ext/jni/ObjectNative"
};

for (const auto& v : classNames)
{
jclass classWeakRef = environment->FindClass(v.c_str());
gClassLoader[v] = static_cast<jclass>(environment->NewGlobalRef(classWeakRef));
environment->DeleteLocalRef(classWeakRef);
}

return JNI_VERSION_1_6;
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package pl.grupapracuj.hermes.helloworld;
// Copyright (C) 2017-2020 Grupa Pracuj Sp. z o.o.
// This file is part of the "Hermes" library.
// For conditions of distribution and use, see copyright notice in license.txt.

package pl.grupapracuj.hermes.helloworld;

import android.app.Activity;
import android.graphics.Color;
Expand Down Expand Up @@ -40,7 +43,7 @@ protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
buildLayout();

mNativeHelloWorld = nativeCreate(assetCopy("certificate.pem"));
mNativeHelloWorld = nativeCreate(getClassLoader(), assetCopy("certificate.pem"));
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View lpView) {
Expand Down Expand Up @@ -173,6 +176,6 @@ private String assetCopy(String pFilename)
return result;
}

private native ObjectNative nativeCreate(String pCertificatePath);
private native ObjectNative nativeCreate(ClassLoader pClassLoader, String pCertificatePath);
private native void nativeExecute(long pPointer, int pRequestIndex);
}
2 changes: 1 addition & 1 deletion ext/hmsAAssetReader.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright (C) 2017-2019 Grupa Pracuj Sp. z o.o.
// Copyright (C) 2017-2020 Grupa Pracuj Sp. z o.o.
// This file is part of the "Hermes" library.
// For conditions of distribution and use, see copyright notice in license.txt.

Expand Down
2 changes: 1 addition & 1 deletion ext/hmsAAssetReader.hpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright (C) 2017-2019 Grupa Pracuj Sp. z o.o.
// Copyright (C) 2017-2020 Grupa Pracuj Sp. z o.o.
// This file is part of the "Hermes" library.
// For conditions of distribution and use, see copyright notice in license.txt.

Expand Down
2 changes: 1 addition & 1 deletion ext/hmsGZipReader.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright (C) 2017-2019 Grupa Pracuj Sp. z o.o.
// Copyright (C) 2017-2020 Grupa Pracuj Sp. z o.o.
// This file is part of the "Hermes" library.
// For conditions of distribution and use, see copyright notice in license.txt.

Expand Down
2 changes: 1 addition & 1 deletion ext/hmsGZipReader.hpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright (C) 2017-2019 Grupa Pracuj Sp. z o.o.
// Copyright (C) 2017-2020 Grupa Pracuj Sp. z o.o.
// This file is part of the "Hermes" library.
// For conditions of distribution and use, see copyright notice in license.txt.

Expand Down
Loading

0 comments on commit 8661e6e

Please sign in to comment.