+ // find cls
+ cls = findClass(env, "org.ocera.orte.types.RecvInfo");
+ if (cls == 0) {
+ #ifdef TEST_STAGE
+ printf(":!c: cls = NULL \n");
+ #endif
+ break;
+ }
+ // call object constructor
+ mid = (*env)->GetMethodID(env, cls, "<init>", "()V");
+ if (mid == 0) {
+ #ifdef TEST_STAGE
+ printf(":!c: constructor failed! \n");
+ #endif
+ break;
+ }
+ // create new object
+ callback_cont->rinfo = (*env)->NewObject(env, cls, mid);
+ if (callback_cont->rinfo == 0) {
+ #ifdef TEST_STAGE
+ printf(":!c: rinfo = NULL \n");
+ #endif
+ break;
+ }
+ // create global reference
+ callback_cont->rinfo = (*env)->NewGlobalRef(env, callback_cont->rinfo);
+ if (callback_cont->rinfo == 0) {
+ #ifdef TEST_STAGE
+ printf(":!c: callback_cont->rinfo = NULL \n");
+ #endif
+ break;
+ }
+ // lookup getBuffer() ID
+ mid = (*env)->GetMethodID(env, cls, "getBuffer", "()Ljava/nio/ByteBuffer;");
+ if (mid == 0) {
+ #ifdef TEST_STAGE
+ printf(":!c: getBuffer() failed! \n");
+ #endif
+ break;
+ }
+ // get ByteBuffer reference
+ obj_info_buffer = (*env)->CallObjectMethod(env, callback_cont->rinfo, mid);
+ callback_cont->info_buf = (*env)->GetDirectBufferAddress(env, obj_info_buffer);
+ // create global references for ByteOrders
+ cls = (*env)->FindClass(env, "java/nio/ByteOrder");
+ fid = (*env)->GetStaticFieldID(env,
+ cls,
+ "BIG_ENDIAN",
+ "Ljava/nio/ByteOrder;");
+ callback_cont->obj_BO_BE = (*env)->GetStaticObjectField(env, cls, fid);
+ callback_cont->obj_BO_BE = (*env)->NewGlobalRef(env, callback_cont->obj_BO_BE);
+ fid = (*env)->GetStaticFieldID(env,
+ cls,
+ "LITTLE_ENDIAN",
+ "Ljava/nio/ByteOrder;");
+ callback_cont->obj_BO_LE = (*env)->GetStaticObjectField(env, cls, fid);
+ callback_cont->obj_BO_LE = (*env)->NewGlobalRef(env, callback_cont->obj_BO_LE);
+ // get methodID - order(ByteOrder)
+ cls = (*env)->GetObjectClass(env, callback_cont->obj_buf);
+ callback_cont->mid_order = (*env)->GetMethodID(env,
+ cls,
+ "order",
+ "(Ljava/nio/ByteOrder;)Ljava/nio/ByteBuffer;");