Skip to content
This repository has been archived by the owner on Nov 6, 2020. It is now read-only.

Commit

Permalink
fix(jni bindings): fix compile errors
Browse files Browse the repository at this point in the history
  • Loading branch information
niklasad1 committed Nov 20, 2018
1 parent 88b1950 commit 98b3f18
Showing 1 changed file with 40 additions and 13 deletions.
53 changes: 40 additions & 13 deletions parity-clib/src/java.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
use std::{mem, ptr};
use std::os::raw::c_void;

use {Callback, parity_config_from_cli, parity_destroy, parity_start, parity_rpc, ParityParams};
use jni::{JNIEnv, objects::JClass, objects::JString, sys::jlong, sys::jobjectArray};
use {Callback, parity_config_from_cli, parity_destroy, parity_start, parity_rpc, parity_subscribe_ws,
parity_unsubscribe_ws, ParityParams};
use jni::{JNIEnv, objects::JClass, objects::JString, sys::jlong, sys::jobjectArray, sys::va_list};

#[no_mangle]
pub unsafe extern "system" fn Java_io_parity_ethereum_Parity_configFromCli(env: JNIEnv, _: JClass, cli: jobjectArray) -> jlong {
Expand All @@ -12,7 +12,7 @@ pub unsafe extern "system" fn Java_io_parity_ethereum_Parity_configFromCli(env:
let mut opts = Vec::with_capacity(cli_len as usize);
let mut opts_lens = Vec::with_capacity(cli_len as usize);

for n in 0 .. cli_len {
for n in 0..cli_len {
let elem = env.get_object_array_element(cli, n).expect("invalid Java bindings");
let elem_str: JString = elem.into();
match env.get_string(elem_str) {
Expand All @@ -39,9 +39,9 @@ pub unsafe extern "system" fn Java_io_parity_ethereum_Parity_configFromCli(env:
}

#[no_mangle]
pub unsafe extern "system" fn Java_io_parity_ethereum_Parity_build(env: JNIEnv, _: JClass, config: jlong) -> jlong {
pub unsafe extern "system" fn Java_io_parity_ethereum_Parity_build(env: JNIEnv, _: JClass, config: va_list) -> jlong {
let params = ParityParams {
configuration: config as usize as *mut c_void,
configuration: config,
.. mem::zeroed()
};

Expand All @@ -56,22 +56,21 @@ pub unsafe extern "system" fn Java_io_parity_ethereum_Parity_build(env: JNIEnv,
}

#[no_mangle]
pub unsafe extern "system" fn Java_io_parity_ethereum_Parity_destroy(_env: JNIEnv, _: JClass, parity: jlong) {
let parity = parity as usize as *mut c_void;
pub unsafe extern "system" fn Java_io_parity_ethereum_Parity_destroy(_env: JNIEnv, _: JClass, parity: va_list) {
parity_destroy(parity);
}

#[no_mangle]
pub unsafe extern "system" fn Java_io_parity_ethereum_Parity_rpcQueryNative<'a>(
env: JNIEnv<'a>,
_: JClass,
parity:jlong,
parity: va_list,
rpc: JString,
timeout_ms: jlong,
callback: Callback,
user_data: va_list,
)
{
let parity = parity as usize as *mut c_void;

let rpc = match env.get_string(rpc) {
Ok(s) => s,
Err(err) => {
Expand All @@ -80,12 +79,40 @@ pub unsafe extern "system" fn Java_io_parity_ethereum_Parity_rpcQueryNative<'a>(
},
};

//FIXME: provide "callback" in java fashion
match parity_rpc(parity, rpc.as_ptr(), rpc.to_bytes().len(), callback) {
match parity_rpc(parity, rpc.as_ptr(), rpc.to_bytes().len(), timeout_ms as usize, callback, user_data) {
0 => (),
_ => {
let _ = env.throw_new("java/lang/Exception", "failed to perform RPC query");
return;
},
}
}

#[no_mangle]
pub unsafe extern "system" fn Java_io_parity_ethereum_Parity_subscribeWebSocket<'a>(
env: JNIEnv<'a>,
_: JClass,
parity: va_list,
rpc: JString,
callback: Callback,
user_data: va_list,
) -> va_list {
let rpc = match env.get_string(rpc) {
Ok(s) => s,
Err(err) => {
let _ = env.throw_new("java/lang/Exception", err.to_string());
return ptr::null_mut();
},
};

let result = parity_subscribe_ws(parity, rpc.as_ptr(), rpc.to_bytes().len(), callback, user_data) as va_list;
if result.is_null() {
let _ = env.throw_new("java/lang/Exception", "failed to subscribe to WebSocket");
}
result
}

#[no_mangle]
pub unsafe extern "system" fn Java_io_parity_ethereum_Parity_unsubscribeWebSocket<'a>(session: va_list) {
parity_unsubscribe_ws(session);
}

0 comments on commit 98b3f18

Please sign in to comment.