All pastes #4392 Raw Edit

AgiNamu

public c v1 · immutable
#4392 ·published 2005-01-17 22:32 UTC
rendered paste body
// Copyright (C) 2003 Telefinity, Inc. All rights reserved.#include <asterisk/file.h>#include <asterisk/logger.h>#include <asterisk/channel.h>#include <asterisk/pbx.h>#include <asterisk/module.h>#include <asterisk/lock.h>#include <stdlib.h>#include <unistd.h>#include <string.h>//#include <gc/gc.h>#include <mono/jit/jit.h>#include <mono/metadata/environment.h>static char *tdesc = "ast_mono loader";static char *app = "ast_mono_loader";static char *synopsis = "Managed wrapper for Asterisk.";STANDARD_LOCAL_USER;LOCAL_USER_DECL;static MonoDomain *domain;	static void main_thread_handler (gpointer user_data){			MonoAssembly *assembly;		ast_log(LOG_DEBUG, "assembly_open\n");		assembly = mono_domain_assembly_open (domain, "/hash");		if (!assembly) 		{			ast_log(LOG_ERROR, "Could not load assembly.\n");			return;		}				char *args[1];		args[0] = "/hash";				ast_log(LOG_DEBUG, "jit_exec\n");		int retval = mono_jit_exec (domain, assembly, 1, args);		ast_log(LOG_DEBUG, "mono_jit_exec returned %d.\n", retval);}	static int loader_exec(struct ast_channel *chan, void *data){	int res=0;	struct localuser *u;	LOCAL_USER_ADD(u);	void *user_data = NULL;		ast_log(LOG_DEBUG, "exec_managed_code\n");	mono_runtime_exec_managed_code (domain, main_thread_handler, user_data);	mono_environment_exitcode_get();			LOCAL_USER_REMOVE(u);	return res;}	int unload_module(void){	mono_jit_cleanup(domain);		STANDARD_HANGUP_LOCALUSERS;	return ast_unregister_application(app);}	int load_module(void){	ast_log(LOG_DEBUG, "Creating domain.\n");	domain = mono_jit_init ("MyDomain");	if (!domain)	{		ast_log(LOG_ERROR, "Domain not created.\n");	}	else	{		ast_log(LOG_DEBUG, "Domain created.\n");	}	return ast_register_application(app, loader_exec, synopsis, tdesc);}	char *description(void){	return tdesc;}	int usecount(void){	int res;	STANDARD_USECOUNT(res);	return res;}	char *key(){	return ASTERISK_GPL_KEY;}