From edb7f5d615b7a1b92fa45eba3531df9eea61a789 Mon Sep 17 00:00:00 2001 From: Brian West Date: Mon, 19 Nov 2007 15:24:19 +0000 Subject: [PATCH] movin git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@6327 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- src/mod/languages/mod_mono/Makefile | 42 ---- src/mod/languages/mod_mono/mod_mono.c | 282 -------------------------- 2 files changed, 324 deletions(-) delete mode 100644 src/mod/languages/mod_mono/Makefile delete mode 100644 src/mod/languages/mod_mono/mod_mono.c diff --git a/src/mod/languages/mod_mono/Makefile b/src/mod/languages/mod_mono/Makefile deleted file mode 100644 index 2b6b04cf4e..0000000000 --- a/src/mod/languages/mod_mono/Makefile +++ /dev/null @@ -1,42 +0,0 @@ - -MONO = mono-1.2.3.1 -MONO_DIR = $(switch_srcdir)/libs/$(MONO) -GLIB = glib-2.12.3 -GLIB_DIR = $(switch_srcdir)/libs/$(GLIB) -GETTEXT = gettext-0.15 -GETTEXT_DIR = $(switch_srcdir)/libs/$(GETTEXT) -PKGCONFIG = pkg-config-0.21 -PKGCONFIG_DIR = $(switch_srcdir)/libs/$(PKGCONFIG) - -LOCAL_CFLAGS=-w `$(PREFIX)/bin/pkg-config --cflags mono` -LOCAL_LDFLAGS=`$(PREFIX)/bin/pkg-config --libs mono` -include ../../../../build/modmake.rules - -DEFAULT_ARGS=--prefix=$(PREFIX) --with-pic -MONO_ARGS=--with-preview=yes --without-sigaltstack --disable-mcs-build -MONO_CFLAGS="-I$(GLIB_DIR)/glib -I$(GLIB_DIR)/gmodule -I$(GLIB_DIR)" - -local_depend: $(GETTEXT_DIR) $(PKGCONFIG_DIR) $(GLIB_DIR) $(MONO_DIR) - -$(GETTEXT_DIR): - $(GETLIB) $(GETTEXT).tar.gz - cd $(GETTEXT_DIR) && ./configure $(DEFAULT_ARGS) - cd $(GETTEXT_DIR) && $(MAKE) install - -$(PKGCONFIG_DIR): - $(GETLIB) $(PKGCONFIG).tar.gz - cd $(PKGCONFIG_DIR) && ./configure $(DEFAULT_ARGS) - cd $(PKGCONFIG_DIR) && $(MAKE) install - -$(GLIB_DIR): - $(GETLIB) $(GLIB).tar.gz - export PKG_CONFIG=$(PREFIX)/bin/pkg-config - export MSGFMT=$(PREFIX)/bin/ - cd $(GLIB_DIR) && ./configure $(DEFAULT_ARGS) - cd $(GLIB_DIR) && $(MAKE) install - -$(MONO_DIR): - $(GETLIB) $(MONO).tar.gz - export PATH=$(PATH):$(PREFIX)/bin/ - cd $(MONO_DIR) && PKG_CONFIG_PATH=$(PREFIX)/lib/pkgconfig CFLAGS=$(MONO_CFLAGS) top_builddir="$(switch_srcdir)/libs/$(MONO)" ./configure $(DEFAULT_ARGS) $(MONO_ARGS) - cd $(MONO_DIR) && $(MAKE) install diff --git a/src/mod/languages/mod_mono/mod_mono.c b/src/mod/languages/mod_mono/mod_mono.c deleted file mode 100644 index 051e1cc279..0000000000 --- a/src/mod/languages/mod_mono/mod_mono.c +++ /dev/null @@ -1,282 +0,0 @@ -/* - * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application - * Copyright (C) 2006, James Martelletti - * - * Version: MPL 1.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application - * - * The Initial Developer of the Original Code is - * James Martelletti - * Portions created by the Initial Developer are Copyright (C) - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * James Martelletti - * - * - * mod_mono.c -- Embedded mono runtime. - * - */ -#include -#include -#include -#include -#include -#include -#include -//#include -#include - -#define SWITCH_MONO_MODULES "mono/" -#define SWITCH_MONO_LIBDIR "lib/" -#define SWITCH_MONO_ASSEMBLY "FreeSwitch.dll" - -/* Module functions */ -switch_status_t mod_mono_load_modules(const char *module_dir); -MonoClass *mod_mono_find_assembly_class(MonoImage * image); - -/* Managed functions */ -void mod_mono_switch_console_printf(switch_text_channel_t channel, char *file, const char *func, int line, char *fmt, char *msg); - -SWITCH_MODULE_LOAD_FUNCTION(mod_mono_load); -SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_mono_shutdown); -SWITCH_MODULE_DEFINITION(mod_mono, mod_mono_load, mod_mono_shutdown, NULL); - -static switch_memory_pool_t *mono_pool = NULL; - -static struct { - MonoDomain *domain; - switch_hash_t *plugins; -} globals; - -typedef struct { - MonoAssembly *assembly; - MonoClass *class; - MonoObject *object; -} mono_plugin; - -static switch_loadable_module_interface_t mono_module_interface = { - /*.module_name */ modname, -}; - -/* - * Load mod_mono module and initialise domain - * - * This function will initialise the memory pool and plugin hash for this module, - * it will then initialise a new mono domain. - */ -SWITCH_MODULE_LOAD_FUNCTION(mod_mono_load) -{ - *module_interface = mono_module_interface; - - /* Initialise memory pool */ - if (switch_core_new_memory_pool(&mono_pool) != SWITCH_STATUS_SUCCESS) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not allocate memory pool\n"); - return SWITCH_STATUS_FALSE; - } - - /* Initialise plugin hash */ - if (switch_core_hash_init(&globals.plugins, mono_pool) != SWITCH_STATUS_SUCCESS) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not initialise plugins hash\n"); - return SWITCH_STATUS_FALSE; - } - - /* Construct the path to the FreeSwitch assembly, then check to make sure it exists */ - switch_size_t assembly_dir_len = strlen(SWITCH_GLOBAL_dirs.base_dir) + strlen(SWITCH_MONO_LIBDIR) + 2; /* Account for / and \0 */ - switch_size_t assembly_file_len = assembly_dir_len + strlen(SWITCH_MONO_ASSEMBLY); - char *assembly_dir = (char *) switch_core_alloc(mono_pool, assembly_dir_len); - char *assembly_file = (char *) switch_core_alloc(mono_pool, assembly_file_len); - - snprintf(assembly_dir, assembly_dir_len, "%s%s%s", SWITCH_GLOBAL_dirs.base_dir, SWITCH_PATH_SEPARATOR, SWITCH_MONO_LIBDIR); - snprintf(assembly_file, assembly_file_len, "%s%s%s%s", SWITCH_GLOBAL_dirs.base_dir, SWITCH_PATH_SEPARATOR, SWITCH_MONO_LIBDIR, SWITCH_MONO_ASSEMBLY); - - if (switch_file_exists(assembly_file, mono_pool) != SWITCH_STATUS_SUCCESS) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Could not find FreeSwitch.NET assembly\n"); - return SWITCH_STATUS_FALSE; - } - - /* Mono wants to know where it will be able to find the FreeSwitch assembly if it's not in the GAC */ - if (getenv("MONO_PATH") != NULL) { - switch_size_t mono_path_len = strlen(getenv("MONO_PATH")) + strlen(assembly_dir) + 2; /* Account for : and \0 */ - char *mono_path = (char *) switch_core_alloc(mono_pool, mono_path_len); - - snprintf(mono_path, mono_path_len, "%s:%s", getenv("MONO_PATH"), assembly_dir); - - setenv("MONO_PATH", mono_path, 1); - } else - setenv("MONO_PATH", assembly_dir, 1); - - /* Now find where our managed modules are */ - switch_size_t module_dir_len = strlen(SWITCH_GLOBAL_dirs.mod_dir) + strlen(SWITCH_MONO_MODULES) + 2; /* Account for / and \0 */ - char *module_dir = (char *) switch_core_alloc(mono_pool, module_dir_len); - - snprintf(module_dir, module_dir_len, "%s%s%s", SWITCH_GLOBAL_dirs.mod_dir, SWITCH_PATH_SEPARATOR, SWITCH_MONO_MODULES); - - /* Initialise the mono domain */ - if (!(globals.domain = mono_jit_init("freeswitch"))) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error initialising mono runtime\n"); - return SWITCH_STATUS_FALSE; - } - - /* Let user know everything initialised fine */ - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Initialised mono runtime\n"); - - /* Load our modules */ - if (mod_mono_load_modules(module_dir) != SWITCH_STATUS_SUCCESS) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Error loading modules\n"); - return SWITCH_STATUS_FALSE; - } - - /* Finally, go through and initialise each plugin before returning SUCCESS */ - switch_hash_index_t *p = NULL; - - for (p = switch_hash_first(NULL, globals.plugins); p; p = switch_hash_next(p)) { - mono_plugin *plugin = (mono_plugin *) switch_core_alloc(mono_pool, sizeof(*plugin)); - switch_ssize_t *key_length = NULL; - const void *key = NULL; - void *value = NULL; - - switch_hash_this(p, &key, key_length, &value); - plugin = (mono_plugin *) value; - - mono_runtime_object_init(plugin->object); - } - - return SWITCH_STATUS_SUCCESS; -} - -/* - * Function for cleanly shutting down mod_mono - * - */ -SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_mono_shutdown) -{ - if (globals.domain) { - mono_jit_cleanup(globals.domain); - globals.domain = NULL; - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Deallocated mono runtime.\n"); - } - switch_core_hash_destroy(&globals.plugins); - - return SWITCH_STATUS_SUCCESS; -} - -/* - * This function will load the managed modules - * - */ -switch_status_t mod_mono_load_modules(const char *module_dir) -{ - if (switch_file_exists(module_dir, mono_pool) != SWITCH_STATUS_SUCCESS) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not access module dir!.\n"); - return SWITCH_STATUS_FALSE; - } - - switch_dir_t *module_dir_handle; - char *file; - size_t len; - const char *ext = ".dll"; - const char *EXT = ".DLL"; - MonoAssembly *assembly; - MonoImage *image; - gpointer iter; - iter = NULL; - mono_plugin *plugin = NULL; - const char *fname = NULL; - char buf[512] = ""; - - if (switch_dir_open(&module_dir_handle, module_dir, mono_pool) != SWITCH_STATUS_SUCCESS) - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Could not open directory: %s\n", module_dir); - - /* Read the modules directory */ - while ((fname = switch_dir_next_file(module_dir_handle, buf, sizeof(buf)))) { - assembly = (MonoAssembly *) switch_core_alloc(mono_pool, sizeof(assembly)); - image = (MonoImage *) switch_core_alloc(mono_pool, sizeof(image)); - - if (!strstr(fname, ext) && !strstr(fname, EXT)) - continue; - - len = strlen(module_dir) + strlen(fname) + 2; - file = (char *) switch_core_alloc(mono_pool, len); - snprintf(file, len, "%s%s", module_dir, fname); - - /* Attempt to open the assembly */ - assembly = mono_domain_assembly_open(globals.domain, file); - - if (!assembly) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Not a valid assembly\n"); - continue; - } - - /* Get the image from assembly */ - image = mono_assembly_get_image(assembly); - - plugin = (mono_plugin *) switch_core_alloc(mono_pool, sizeof(*plugin)); - - plugin->assembly = assembly; - plugin->class = mod_mono_find_assembly_class(mono_assembly_get_image(plugin->assembly)); - - if (!plugin->class) - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "No plugin class\n"); - - plugin->object = mono_object_new(globals.domain, plugin->class); - - switch_core_hash_insert(globals.plugins, (char *) mono_image_get_name(mono_assembly_get_image(assembly)), plugin); - - plugin = NULL; - } - return SWITCH_STATUS_SUCCESS; -} - -/* - * - */ -MonoClass *mod_mono_find_assembly_class(MonoImage * image) -{ - MonoClass *class, *parent_class = NULL; - int i, total; - - total = mono_image_get_table_rows(image, MONO_TABLE_TYPEDEF); - - for (i = 1; i <= total; ++i) { - class = mono_class_get(image, MONO_TOKEN_TYPE_DEF | i); - parent_class = mono_class_get_parent(class); - - if (parent_class) - if (!strcmp("Module", mono_class_get_name(parent_class))) - return class; - } - - return NULL; -} - -/* - * - */ -void mono_switch_console_printf(switch_text_channel_t channel, char *file, const char *func, int line, char *fmt, char *msg) -{ - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, msg); -} - -/* For Emacs: - * Local Variables: - * mode:c - * indent-tabs-mode:nil - * tab-width:4 - * c-basic-offset:4 - * End: - * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: - */