Exemplo n.º 1
0
static void
process_async_call (gpointer data, GckCallClass *klass)
{
	GckCall *call = GCK_CALL (data);

	g_assert (GCK_IS_CALL (call));

	call->rv = perform_call (call->perform, call->cancellable, call->args);

	g_async_queue_push (klass->completed_queue, call);

	/* Wakeup main thread if on a separate thread */
	g_main_context_wakeup (NULL);
}
Exemplo n.º 2
0
gboolean
_gck_call_sync (gpointer object, gpointer perform, gpointer complete,
                 gpointer data, GCancellable *cancellable, GError **err)
{
	GckArguments *args = (GckArguments*)data;
	GckModule *module = NULL;
	CK_RV rv;

	g_assert (!object || G_IS_OBJECT (object));
	g_assert (perform);
	g_assert (args);

	if (object) {
		g_object_get (object, "module", &module, "handle", &args->handle, NULL);
		g_assert (GCK_IS_MODULE (module));

		/* We now hold a reference to module until below */
		args->pkcs11 = gck_module_get_functions (module);
		g_assert (args->pkcs11);
	}

	do {
		rv = perform_call (perform, cancellable, args);
		if (rv == CKR_FUNCTION_CANCELED)
			break;

	} while (!complete_call (complete, args, rv));

	if (module)
		g_object_unref (module);

	if (rv == CKR_OK)
		return TRUE;

	g_set_error (err, GCK_ERROR, rv, "%s", gck_message_from_rv (rv));
	return FALSE;
}
Exemplo n.º 3
0
void initialize_and_call(JNIEnv * env, jobject jobj, jdoubleArray args) 
{
    jdouble *double_array;
    int num_args;
	jfieldID fid; 
     			
	genv = env;			

	if (test_object_handle_class == NULL) {
		test_object_handle_class = (*env)->GetObjectClass(env, jobj);
		if (test_object_handle_class == NULL) {
			native_error("could not get test object class (TestObject)");
		}
	}
	
	if (trace_field_id == NULL) {
		trace_field_id = (*env)->GetFieldID(env, test_object_handle_class, "t",  "Lorg/iguanatool/testobject/trace/Trace;");
		if (trace_field_id == NULL) {
			native_error("could not get trace field ID of TestObject");
		}	
  	}

	trace_object = (*env)->GetObjectField(env, jobj, trace_field_id);
	if (trace_object == NULL) {
		native_error("could not get trace field of TestObject instance (object not initialized?)");
	}	
	
	if (trace_class == NULL) {
		trace_class = (*env)->GetObjectClass(env, trace_object);
		if (trace_class == NULL) {
			native_error("could not get trace class (Trace)");
		}
		
		node_method_id = (*genv)->GetMethodID(genv, trace_class, "node", "(IZ)Z");			
		if (node_method_id == NULL) {
			native_error("could not get Trace.node() method ID");
		}
		is_true_method_id = (*genv)->GetMethodID(genv, trace_class, "isTrue", "(ID)Z");			
		if (is_true_method_id == NULL) {
			native_error("could not get Trace.isTrue() method ID");
		}
		ref_equals_method_id = (*genv)->GetMethodID(genv, trace_class, "refEquals", "(IZ)Z");			
		if (ref_equals_method_id == NULL) {		
			native_error("could not get Trace.refEquals() method ID");
		}	
		ref_not_equals_method_id = (*genv)->GetMethodID(genv, trace_class, "refNotEquals", "(IZ)Z");			
		if (ref_not_equals_method_id == NULL) {		
			native_error("could not get Trace.refNotEquals() method ID");
		}	
		equals_method_id = (*genv)->GetMethodID(genv, trace_class, "equals", "(IDD)Z");			
		if (equals_method_id == NULL) {
			native_error("could not get Trace.equals() method ID");
		}				
		not_equals_method_id = (*genv)->GetMethodID(genv, trace_class, "notEquals", "(IDD)Z");			
		if (not_equals_method_id == NULL) {
			native_error("could not get Trace.notEquals() method ID");
		}						
		less_than_method_id = (*genv)->GetMethodID(genv, trace_class, "lessThan", "(IDD)Z");			
		if (less_than_method_id == NULL) {
			native_error("could not get Trace.lessThan() method ID");
		}								
		less_than_or_equal_method_id = (*genv)->GetMethodID(genv, trace_class, "lessThanOrEqual", "(IDD)Z");			
		if (less_than_or_equal_method_id == NULL) {
			native_error("could not get Trace.lessThanOrEqual() method ID");
		}										
		greater_than_method_id = (*genv)->GetMethodID(genv, trace_class, "greaterThan", "(IDD)Z");			
		if (greater_than_method_id == NULL) {
			native_error("could not get Trace.greaterThan() method ID");
		}												
		greater_than_or_equal_method_id = (*genv)->GetMethodID(genv, trace_class, "greaterThanOrEqual", "(IDD)Z");			
		if (greater_than_or_equal_method_id == NULL) {
			native_error("could not get Trace.greaterThanOrEqual() method ID");
		}
	}

	double_array = (*env)->GetDoubleArrayElements(env, args, NULL);
    if (double_array == NULL) {
    	native_error("could not convert test object arguments to native double array");
    }
    
	num_args = (*env)->GetArrayLength(env, args);
		
	if (!setjmp(__ins_early_exit_temp)) {
		perform_call(double_array, num_args);	
	}
    (*env)->ReleaseDoubleArrayElements(env, args, double_array, 0);	
}