plugins/mono/loader/mono-helper.c

branch
gaim
changeset 20470
77693555855f
parent 13071
b98e72d4089a
parent 20469
b2836a24d81e
child 20471
1966704b3e42
--- a/plugins/mono/loader/mono-helper.c	Mon Apr 16 00:43:53 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,251 +0,0 @@
-/*
- * Mono Plugin Loader
- *
- * -- Thanks to the perl plugin loader for all the great tips ;-)
- *
- * Eoin Coffey
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <glib.h>
-#include <string.h>
-#include "mono-helper.h"
-#include "mono-glue.h"
-#include "value.h"
-#include "debug.h"
-
-static gboolean _runtime_active = FALSE;
-
-gboolean ml_init()
-{
-	MonoDomain *d;
-	
-	g_return_val_if_fail(_runtime_active == FALSE, TRUE);
-	
-	d = mono_jit_init("gaim");
-	
-	if (!d) {
-		ml_set_domain(NULL);
-		return FALSE;
-	}
-	
-	ml_set_domain(d);
-	
-	ml_init_internal_calls();
-	
-	_runtime_active = TRUE;
-	
-	return TRUE;
-}
-
-void ml_uninit()
-{
-	g_return_if_fail(_runtime_active == TRUE);
-	
-	mono_jit_cleanup(ml_get_domain());
-	
-	ml_set_domain(NULL);
-	
-	_runtime_active = FALSE;
-}
-
-MonoObject* ml_delegate_invoke(MonoObject *method, void **params)
-{
-	MonoObject *ret, *exception;
-	
-	ret = mono_runtime_delegate_invoke(method, params, &exception);
-	if (exception) {
-		gaim_debug(GAIM_DEBUG_ERROR, "mono", "caught exception: %s\n", mono_class_get_name(mono_object_get_class(exception)));
-	}
-	
-	return ret;
-}
-
-MonoObject* ml_invoke(MonoMethod *method, void *obj, void **params)
-{
-	MonoObject *ret, *exception;
-	
-	ret = mono_runtime_invoke(method, obj, params, &exception);
-	if (exception) {
-		gaim_debug(GAIM_DEBUG_ERROR, "mono", "caught exception: %s\n", mono_class_get_name(mono_object_get_class(exception)));
-	}
-	
-	return ret;
-}
-
-MonoClass* ml_find_plugin_class(MonoImage *image)
-{
-	MonoClass *klass, *pklass = NULL;
-	int i, total;
-
-	total = mono_image_get_table_rows (image, MONO_TABLE_TYPEDEF);
-	for (i = 1; i <= total; ++i) {
-		klass = mono_class_get (image, MONO_TOKEN_TYPE_DEF | i);
-		pklass = mono_class_get_parent(klass);
-		if (pklass) 
-			if (strcmp("GaimPlugin", mono_class_get_name(pklass)) == 0)
-				return klass;
-	}
-	
-	return NULL;
-}
-
-void ml_set_prop_string(MonoObject *obj, char *field, char *data)
-{
-	MonoClass *klass;
-	MonoProperty *prop;
-	MonoString *str;
-	gpointer args[1];
-	
-	klass = mono_object_get_class(obj);
-	
-	prop = mono_class_get_property_from_name(klass, field);
-	
-	str = mono_string_new(ml_get_domain(), data);
-	
-	args[0] = str;
-	
-	mono_property_set_value(prop, obj, args, NULL);
-}
-
-gchar* ml_get_prop_string(MonoObject *obj, char *field)
-{
-	MonoClass *klass;
-	MonoProperty *prop;
-	MonoString *str;
-	
-	klass = mono_object_get_class(obj);
-	
-	prop = mono_class_get_property_from_name(klass, field);
-	
-	str = (MonoString*)mono_property_get_value(prop, obj, NULL, NULL);
-	
-	return mono_string_to_utf8(str);
-}
-
-gboolean ml_is_api_dll(MonoImage *image)
-{	
-	MonoClass *klass;
-	int i, total;
-
-	total = mono_image_get_table_rows (image, MONO_TABLE_TYPEDEF);
-	for (i = 1; i <= total; ++i) {
-		klass = mono_class_get (image, MONO_TOKEN_TYPE_DEF | i);
-		if (strcmp(mono_class_get_name(klass), "Debug") == 0)
-			if (strcmp(mono_class_get_namespace(klass), "Gaim") == 0) {
-				ml_set_api_image(image);
-				return TRUE;
-			}
-	}
-	
-	return FALSE;
-}
-
-MonoObject* ml_object_from_gaim_type(GaimType type, gpointer data)
-{
-	return NULL;
-}
-
-MonoObject* ml_object_from_gaim_subtype(GaimSubType type, gpointer data)
-{
-	MonoObject *obj = NULL;
-	
-	switch (type) {
-		case GAIM_SUBTYPE_BLIST_BUDDY:
-			obj = gaim_blist_build_buddy_object(data);
-		break;
-		case GAIM_SUBTYPE_STATUS:
-			obj = gaim_status_build_status_object(data);
-		break;
-		default:
-		break;
-	}
-	
-	return obj;
-}
-
-MonoObject* ml_create_api_object(char *class_name)
-{
-	MonoObject *obj = NULL;
-	MonoClass *klass = NULL;
-		
-	klass = mono_class_from_name(ml_get_api_image(), "Gaim", class_name);
-	if (!klass) {
-		gaim_debug(GAIM_DEBUG_FATAL, "mono", "couldn't find the '%s' class\n", class_name);
-		return NULL;
-	}
-	
-	obj = mono_object_new(ml_get_domain(), klass);
-	if (!obj) {
-		gaim_debug(GAIM_DEBUG_FATAL, "mono", "couldn't create the object from class '%s'\n", class_name);
-		return NULL;
-	}
-	
-	mono_runtime_object_init(obj);
-	
-	return obj;
-}
-
-static MonoDomain *_domain = NULL;
-
-MonoDomain* ml_get_domain(void)
-{
-	return _domain;
-}
-
-void ml_set_domain(MonoDomain *d)
-{
-	_domain = d;
-}
-
-static MonoImage *_api_image = NULL;
-
-void ml_set_api_image(MonoImage *image)
-{
-	_api_image = image;
-}
-
-MonoImage* ml_get_api_image()
-{
-	return _api_image;
-}
-
-void ml_init_internal_calls(void)
-{
-	mono_add_internal_call("Gaim.Debug::_debug", gaim_debug_glue);
-	mono_add_internal_call("Gaim.Signal::_connect", gaim_signal_connect_glue);
-	mono_add_internal_call("Gaim.BuddyList::_get_handle", gaim_blist_get_handle_glue);
-}
-
-static GHashTable *plugins_hash = NULL;
-
-void ml_add_plugin(GaimMonoPlugin *plugin)
-{
-	if (!plugins_hash)
-		plugins_hash = g_hash_table_new(NULL, NULL);
-		
-	g_hash_table_insert(plugins_hash, plugin->klass, plugin);
-}
-
-gboolean ml_remove_plugin(GaimMonoPlugin *plugin)
-{
-	return g_hash_table_remove(plugins_hash, plugin->klass);
-}
-
-gpointer ml_find_plugin(GaimMonoPlugin *plugin)
-{
-	return g_hash_table_lookup(plugins_hash, plugin->klass);
-}
-
-gpointer ml_find_plugin_by_class(MonoClass *klass)
-{
-	return g_hash_table_lookup(plugins_hash, klass);
-}
-
-GHashTable* ml_get_plugin_hash()
-{
-	return plugins_hash;
-}

mercurial