blob: ef66a03db105670544aa86da06d998f67f494e0b [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// +build java android
// Stubs for invoking JNI (Java Native Interface) methods, which all use
// function pointers. These stubs are meant for languages such as GO
// that cannot invoke function pointers.
#include <jni.h>
// Constructs a new Java object. The method ID indicates which constructor method to invoke.
jobject NewObjectA(JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
// Invokes an instance (nonstatic) method on a Java object, according to the specified class and method ID.
jobject CallObjectMethodA(JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
jint CallIntMethodA(JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
jlong CallLongMethodA(JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
jboolean CallBooleanMethodA(JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
void CallVoidMethodA(JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
// Invokes a static method on a Java object, according to the specified class and method ID.
jobject CallStaticObjectMethodA(JNIEnv *env, jclass cls, jmethodID methodID, jvalue *args);
jint CallStaticIntMethodA(JNIEnv *env, jclass cls, jmethodID methodID, jvalue *args);
jlong CallStaticLongMethodA(JNIEnv *env, jclass cls, jmethodID methodID, jvalue *args);
jboolean CallStaticBooleanMethodA(JNIEnv *env, jclass cls, jmethodID methodID, jvalue *args);
void CallStaticVoidMethodA(JNIEnv *env, jclass cls, jmethodID methodID, jvalue *args);
// Returns the class of an object.
jclass GetObjectClass(JNIEnv* env, jobject obj);
// Searches the directories and zip files specified by the CLASSPATH environment
// variable for the class with the specified name.
jclass FindClass(JNIEnv* env, const char* name);
// Returns the method ID for an instance (nonstatic) method of a class or
// interface.
jmethodID GetMethodID(JNIEnv* env, jclass class, const char* name, const char* args);
// Returns the method ID for a static method of a class or interface.
jmethodID GetStaticMethodID(JNIEnv* env, jclass class, const char* name, const char* args);
// Returns the field ID for an instance (nonstatic) field of a class.
jfieldID GetFieldID(JNIEnv* env, jclass class, const char* name, const char* sig);
// Returns the field ID for a static field of a class.
jfieldID GetStaticFieldID(JNIEnv* env, jclass class, const char* name, const char* sig);
// Return the values of an instance (nonstatic) fields of the provided object.
jobject GetObjectField(JNIEnv* env, jobject obj, jfieldID fieldID);
jboolean GetBooleanField(JNIEnv* env, jobject obj, jfieldID fieldID);
jint GetIntField(JNIEnv* env, jobject obj, jfieldID fieldID);
jlong GetLongField(JNIEnv* env, jobject obj, jfieldID fieldID);
jobject GetStaticObjectField(JNIEnv* env, jclass cls, jfieldID fieldID);
// Constructs a new array holding objects of type jclass.
jobjectArray NewObjectArray(JNIEnv* env, jsize len, jclass class, jobject initialElement);
// Constructs a new byte array.
jbyteArray NewByteArray(JNIEnv* env, jsize len);
// Returns the number of elements in the array.
jsize GetArrayLength(JNIEnv* env, jarray array);
// Returns an element of an Object array.
jobject GetObjectArrayElement(JNIEnv* env, jobjectArray array, jsize index);
// Sets an element of an Object array.
void SetObjectArrayElement(JNIEnv* env, jobjectArray array, jsize index, jobject obj);
// Returns the contents of a provided Java byte/long array as a primitive array.
jbyte* GetByteArrayElements(JNIEnv* env, jbyteArray array, jboolean *isCopy);
jlong* GetLongArrayElements(JNIEnv* env, jlongArray array, jboolean *isCopy);
// Informs the VM that the native code no longer needs access to elems.
// If necessary, this function copies back all changes made to elems to the
// original array. Supported modes are:
// 0 copy back the content and free the elems buffer
// JNI_COMMIT copy back the content but do not free the elems buffer
// JNI_ABORT free the buffer without copying back the possible changes
void ReleaseByteArrayElements(JNIEnv* env, jbyteArray array, jbyte* elems, jint mode);
void ReleaseLongArrayElements(JNIEnv* env, jlongArray array, jlong* elems, jint mode);
// Copies the data from a primitive array into the Java array.
void SetByteArrayRegion(JNIEnv* env, jbyteArray array, jsize start, jsize len, const jbyte* data);
// Returns a pointer to an array of bytes representing the string in modified
// UTF-8 encoding.
const char* GetStringUTFChars(JNIEnv* env, jstring str, jboolean* isCopy);
// Informs the VM that the native code no longer needs access to the byte array.
void ReleaseStringUTFChars(JNIEnv* env, jstring str, const char* utf);
// Constructs a new java.lang.String object from an array of characters in
// modified UTF-8 encoding.
jstring NewStringUTF(JNIEnv* env, const char* str);
// Causes a java.lang.Throwable object to be thrown.
jint Throw(JNIEnv* env, jthrowable obj);
// Constructs an exception object from the specified class with the given
// message and causes that exception to be thrown.
jint ThrowNew(JNIEnv* env, jclass class, const char* msg);
// Creates a new local reference to the object referred to by the obj argument.
jobject NewLocalRef(JNIEnv* env, jobject obj);
// Deletes the local reference pointed to by localRef.
void DeleteLocalRef(JNIEnv* env, jobject localRef);
// Creates a new global reference to the object referred to by the obj argument.
jobject NewGlobalRef(JNIEnv* env, jobject obj);
// Deletes the global reference pointed to by globalRef.
void DeleteGlobalRef(JNIEnv* env, jobject globalRef);
// Returns the type of the object referred to by the obj argument.
// The argument obj can either be a local, global or weak global reference.
jobjectRefType GetObjectRefType(JNIEnv* env, jobject obj);
// Returns the Java VM interface (used in the Invocation API) associated with
// the current thread.
jint GetJavaVM(JNIEnv* env, JavaVM** vm);
// Determines if an exception is being thrown.
jthrowable ExceptionOccurred(JNIEnv* env);
// Clears any exception that is currently being thrown.
void ExceptionClear(JNIEnv* env);
// Attaches the current thread to a Java VM.
jint AttachCurrentThread(JavaVM* jvm, JNIEnv** env, void* args);
// Attaches the current thread as a daemon to a Java VM. This means that the
// Java VM will not wait for this thread to complete before exiting the program.
jint AttachCurrentThreadAsDaemon(JavaVM* jvm, JNIEnv** env, void* args);
// Detaches the current thread from a Java VM.
jint DetachCurrentThread(JavaVM* jvm);
// Gets the Java environment for the current thread. If successful, *env will
// point to the appropriate interface and JNI_OK status will be returned;
// otherwise, *env will be NULL and JNI_EDETACHED or JNI_EVERSION status will
// be returned.
jint GetEnv(JavaVM* jvm, JNIEnv** env, jint version);
// Tests whether an object is an instance of a class.
jboolean IsInstanceOf(JNIEnv *env, jobject obj, jclass class);
// Creates a new local reference frame, in which at least a given number of
// local references can be created. Returns 0 on success, a negative number and
// a pending OutOfMemoryError on failure.
//
// Note that local references already created in previous local frames are still
// valid in the current local frame.
jint PushLocalFrame(JNIEnv *env, jint capacity);
// Pops off the current local reference frame, frees all the local references,
// and returns a local reference in the previous local reference frame for the
// given result object.
//
// Pass NULL as result if you do not need to return a reference to the previous
// frame.
jobject PopLocalFrame(JNIEnv *env, jobject result);