20 "JavaBufferFilter::constructor:"
21 " allocating global reference for object\n");
23 obj_ = (jobject)jvm.
env->NewGlobalRef(obj);
28 "JavaBufferFilter::constructor:"
29 " allocating global reference for object's class\n");
35 "JavaBufferFilter::constructor:"
36 " class and object obtained successfully\n");
41 "JavaBufferFilter::constructor:"
42 " ERROR: class object inaccessible\n");
48 "JavaBufferFilter::constructor:"
49 " ERROR: object is invalid\n");
55 "JavaBufferFilter::constructor:"
56 " ERROR: unable to acquire JAVA environment\n");
66 "JavaBufferFilter::destructor:"
67 " Deleting global references\n");
69 jvm.
env->DeleteGlobalRef(obj_);
70 jvm.
env->DeleteGlobalRef(class_);
75 char* source,
int size,
int max_size)
const
81 "JavaBufferFilter::encode:"
82 " Obtaining user-defined encode method\n");
84 jmethodID call = jvm.
env->GetMethodID(class_,
"encode",
"([BJJ)J");
89 "JavaBufferFilter::encode:"
90 " Creating a Java byte array and copying values\n");
94 jbyteArray new_array = jvm.
env->NewByteArray(max_size);
95 void* data = jvm.
env->GetPrimitiveArrayCritical((jarray)new_array, &isCopy);
98 memcpy(data, source, (
size_t)size);
101 "JavaBufferFilter::encode:"
102 " Calling user-defined encode method\n");
103 result = jvm.
env->CallIntMethod(obj_, call, new_array, size, max_size);
106 "JavaBufferFilter::encode:"
107 " Copying values from java byte array to the C buffer\n");
110 memcpy(source, data, (
size_t)result);
113 "JavaBufferFilter::encode:"
114 " Deleting local Java variables\n");
117 jvm.
env->ReleaseByteArrayElements(new_array, (jbyte*)data, JNI_ABORT);
118 jvm.
env->DeleteLocalRef(new_array);
123 "JavaBufferFilter::encode:"
124 " ERROR: Unable to find user-defined encode method\n");
131 char* source,
int size,
int max_size)
const
137 "JavaBufferFilter::decode:"
138 " Obtaining user-defined decode method\n");
140 jmethodID call = jvm.
env->GetMethodID(class_,
"decode",
"([BJJ)J");
145 "JavaBufferFilter::decode:"
146 " Creating a Java byte array and copying values\n");
150 jbyteArray new_array = jvm.
env->NewByteArray(max_size);
151 void* data = jvm.
env->GetPrimitiveArrayCritical((jarray)new_array, &isCopy);
154 "JavaBufferFilter::decode:"
155 " Copying values from java byte array to the C buffer\n");
158 memcpy(data, source, (
size_t)size);
161 "JavaBufferFilter::decode:"
162 " Calling user-defined decode method\n");
163 result = jvm.
env->CallIntMethod(obj_, call, new_array, size, max_size);
166 memcpy(source, data, (
size_t)result);
169 "JavaBufferFilter::decode:"
170 " Deleting local Java variables\n");
173 jvm.
env->ReleaseByteArrayElements(new_array, (jbyte*)data, JNI_ABORT);
174 jvm.
env->DeleteLocalRef(new_array);
179 "JavaBufferFilter::decode:"
180 " ERROR: Unable to find user-defined decode method\n");
#define madara_logger_ptr_log(loggering, level,...)
Fast version of the madara::logger::log method for Logger pointers.
JavaBufferFilter(logger::Logger &logger, jobject obj)
Constructor.
jclass class_
the class of the Java object obj_
virtual ~JavaBufferFilter()
Destructor.
logger::Logger * logger_
a logger
virtual std::string get_id(void)
Gets the id of the filter.
virtual uint32_t get_version(void)
Gets the version of the filter.
virtual int encode(char *source, int size, int max_size) const
Encodes the buffer in place using AES encryption.
virtual int decode(char *source, int size, int max_size) const
Decodes the buffer in place using AES encryption.
A multi-threaded logger for logging to one or more destinations.
This class encapsulates attaching and detaching to a VM.
JNIEnv * env
The Java environment.
Provides knowledge logging services to files and terminals.
uint32_t get_uint_version(const std::string &str_version)
Converts a string version to a uint32.