提交 e4450044 authored 作者: Michael Jerris's avatar Michael Jerris

indent

上级 988147a7
...@@ -45,205 +45,236 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_java_shutdown); ...@@ -45,205 +45,236 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_java_shutdown);
SWITCH_MODULE_DEFINITION(mod_java, mod_java_load, mod_java_shutdown, NULL); SWITCH_MODULE_DEFINITION(mod_java, mod_java_load, mod_java_shutdown, NULL);
static void launch_java(switch_core_session_t *session, const char *data, JNIEnv * env) static void launch_java(switch_core_session_t *session, const char *data, JNIEnv *env)
{ {
jclass Launcher = NULL; jclass Launcher = NULL;
jmethodID launch = NULL; jmethodID launch = NULL;
jstring uuid = NULL; jstring uuid = NULL;
jstring args = NULL; jstring args = NULL;
Launcher = (*env)->FindClass(env, "org/freeswitch/Launcher"); Launcher = (*env)->FindClass(env, "org/freeswitch/Launcher");
if (Launcher == NULL) { if (Launcher == NULL)
(*env)->ExceptionDescribe(env); {
goto done; (*env)->ExceptionDescribe(env);
} goto done;
}
launch = (*env)->GetStaticMethodID(env, Launcher, "launch", "(Ljava/lang/String;Ljava/lang/String;)V");
if (launch == NULL) { launch = (*env)->GetStaticMethodID(env, Launcher, "launch", "(Ljava/lang/String;Ljava/lang/String;)V");
(*env)->ExceptionDescribe(env); if (launch == NULL)
goto done; {
} (*env)->ExceptionDescribe(env);
goto done;
uuid = (*env)->NewStringUTF(env, switch_core_session_get_uuid(session)); }
if (uuid == NULL) {
(*env)->ExceptionDescribe(env); uuid = (*env)->NewStringUTF(env, switch_core_session_get_uuid(session));
goto done; if (uuid == NULL)
} {
(*env)->ExceptionDescribe(env);
args = (*env)->NewStringUTF(env, data); goto done;
if (args == NULL) { }
(*env)->ExceptionDescribe(env);
goto done; args = (*env)->NewStringUTF(env, data);
} if (args == NULL)
{
(*env)->CallStaticVoidMethod(env, Launcher, launch, uuid, args); (*env)->ExceptionDescribe(env);
if ((*env)->ExceptionOccurred(env)) goto done;
(*env)->ExceptionDescribe(env); }
done: (*env)->CallStaticVoidMethod(env, Launcher, launch, uuid, args);
if (args != NULL) if ((*env)->ExceptionOccurred(env))
(*env)->DeleteLocalRef(env, args); (*env)->ExceptionDescribe(env);
if (uuid != NULL)
(*env)->DeleteLocalRef(env, uuid); done:
if (Launcher != NULL) if (args != NULL)
(*env)->DeleteLocalRef(env, Launcher); (*env)->DeleteLocalRef(env, args);
if (uuid != NULL)
(*env)->DeleteLocalRef(env, uuid);
if (Launcher != NULL)
(*env)->DeleteLocalRef(env, Launcher);
} }
SWITCH_STANDARD_APP(java_function) SWITCH_STANDARD_APP(java_function)
{ {
JNIEnv *env; JNIEnv *env;
jint res; jint res;
if (javaVM == NULL) if (javaVM == NULL)
return; return;
res = (*javaVM)->AttachCurrentThread(javaVM, (void *) &env, NULL); res = (*javaVM)->AttachCurrentThread(javaVM, (void*) &env, NULL);
if (res == JNI_OK) { if (res == JNI_OK)
launch_java(session, data, env); {
(*javaVM)->DetachCurrentThread(javaVM); launch_java(session, data, env);
} else (*javaVM)->DetachCurrentThread(javaVM);
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error attaching thread to Java VM!\n"); }
else
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error attaching thread to Java VM!\n");
} }
static switch_status_t load_config(JavaVMOption ** javaOptions, int *optionCount) static switch_status_t load_config(JavaVMOption **javaOptions, int *optionCount)
{ {
switch_xml_t cfg, xml; switch_xml_t cfg, xml;
switch_status_t status; switch_status_t status;
xml = switch_xml_open_cfg("java.conf", &cfg, NULL); xml = switch_xml_open_cfg("java.conf", &cfg, NULL);
if (xml) { if (xml)
switch_xml_t javavm; {
switch_xml_t options; switch_xml_t javavm;
switch_xml_t options;
javavm = switch_xml_child(cfg, "javavm");
if (javavm != NULL) { javavm = switch_xml_child(cfg, "javavm");
const char *path = switch_xml_attr_soft(javavm, "path"); if (javavm != NULL)
if (path != NULL) { {
status = switch_dso_load(&javaVMHandle, path, memoryPool); const char *path = switch_xml_attr_soft(javavm, "path");
if (status != SWITCH_STATUS_SUCCESS) if (path != NULL)
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error loading %s\n", path); {
} else { status = switch_dso_load(&javaVMHandle, path, memoryPool);
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No Java VM path specified in java.conf.xml\n"); if (status != SWITCH_STATUS_SUCCESS)
status = SWITCH_STATUS_FALSE; switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error loading %s\n", path);
} }
} else { else
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No Java VM specified in java.conf.xml\n"); {
status = SWITCH_STATUS_FALSE; switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No Java VM path specified in java.conf.xml\n");
goto close; status = SWITCH_STATUS_FALSE;
} }
}
options = switch_xml_child(cfg, "options"); else
if (options != NULL) { {
switch_xml_t option; switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No Java VM specified in java.conf.xml\n");
int i = 0; status = SWITCH_STATUS_FALSE;
*optionCount = 0; goto close;
for (option = switch_xml_child(options, "option"); option; option = option->next) { }
const char *value = switch_xml_attr_soft(option, "value");
if (value != NULL) options = switch_xml_child(cfg, "options");
++ * optionCount; if (options != NULL)
} {
*optionCount += 1; switch_xml_t option;
*javaOptions = switch_core_alloc(memoryPool, (switch_size_t) (*optionCount * sizeof(JavaVMOption))); int i = 0;
if (*javaOptions == NULL) { *optionCount = 0;
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Out of memory!\n"); for (option = switch_xml_child(options, "option"); option; option = option->next)
status = SWITCH_STATUS_FALSE; {
goto close; const char *value = switch_xml_attr_soft(option, "value");
} if (value != NULL)
for (option = switch_xml_child(options, "option"); option; option = option->next) { ++*optionCount;
const char *value = switch_xml_attr_soft(option, "value"); }
if (value == NULL) *optionCount += 1;
continue; *javaOptions = switch_core_alloc(memoryPool, (switch_size_t)(*optionCount * sizeof(JavaVMOption)));
(*javaOptions)[i].optionString = switch_core_strdup(memoryPool, value); if (*javaOptions == NULL)
if ((*javaOptions)[i].optionString == NULL) { {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Out of memory!\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Out of memory!\n");
status = SWITCH_STATUS_FALSE; status = SWITCH_STATUS_FALSE;
goto close; goto close;
} }
++i; for (option = switch_xml_child(options, "option"); option; option = option->next)
} {
(*javaOptions)[i].optionString = "-Djava.library.path=" SWITCH_PREFIX_DIR SWITCH_PATH_SEPARATOR "mod"; const char *value = switch_xml_attr_soft(option, "value");
} if (value == NULL)
continue;
close: (*javaOptions)[i].optionString = switch_core_strdup(memoryPool, value);
switch_xml_free(xml); if ((*javaOptions)[i].optionString == NULL)
} else { {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error opening java.conf.xml\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Out of memory!\n");
status = SWITCH_STATUS_FALSE; status = SWITCH_STATUS_FALSE;
} goto close;
return status; }
++i;
}
(*javaOptions)[i].optionString = "-Djava.library.path=" SWITCH_PREFIX_DIR SWITCH_PATH_SEPARATOR "mod";
}
close:
switch_xml_free(xml);
}
else
{
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error opening java.conf.xml\n");
status = SWITCH_STATUS_FALSE;
}
return status;
} }
static switch_status_t create_java_vm(JavaVMOption * options, int optionCount) static switch_status_t create_java_vm(JavaVMOption *options, int optionCount)
{ {
jint(JNICALL * pJNI_CreateJavaVM) (JavaVM **, void **, void *); jint (JNICALL *pJNI_CreateJavaVM)(JavaVM**,void**,void*);
switch_status_t status; switch_status_t status;
status = switch_dso_sym((void *) &pJNI_CreateJavaVM, javaVMHandle, "JNI_CreateJavaVM"); status = switch_dso_sym((void*) &pJNI_CreateJavaVM, javaVMHandle, "JNI_CreateJavaVM");
if (status == SWITCH_STATUS_SUCCESS) { if (status == SWITCH_STATUS_SUCCESS)
JNIEnv *env; {
JavaVMInitArgs initArgs; JNIEnv *env;
jint res; JavaVMInitArgs initArgs;
jint res;
memset(&initArgs, 0, sizeof(initArgs));
initArgs.version = JNI_VERSION_1_4; memset(&initArgs, 0, sizeof(initArgs));
initArgs.nOptions = optionCount; initArgs.version = JNI_VERSION_1_4;
initArgs.options = options; initArgs.nOptions = optionCount;
initArgs.ignoreUnrecognized = JNI_TRUE; initArgs.options = options;
initArgs.ignoreUnrecognized = JNI_TRUE;
res = pJNI_CreateJavaVM(&javaVM, (void *) &env, &initArgs);
if (res == JNI_OK) { res = pJNI_CreateJavaVM(&javaVM, (void*) &env, &initArgs);
(*javaVM)->DetachCurrentThread(javaVM); if (res == JNI_OK)
status = SWITCH_STATUS_SUCCESS; {
} else { (*javaVM)->DetachCurrentThread(javaVM);
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error creating Java VM!\n"); status = SWITCH_STATUS_SUCCESS;
status = SWITCH_STATUS_FALSE; }
} else
} else { {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Specified Java VM doesn't have JNI_CreateJavaVM\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error creating Java VM!\n");
status = SWITCH_STATUS_FALSE; status = SWITCH_STATUS_FALSE;
} }
return status; }
else
{
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Specified Java VM doesn't have JNI_CreateJavaVM\n");
status = SWITCH_STATUS_FALSE;
}
return status;
} }
SWITCH_MODULE_LOAD_FUNCTION(mod_java_load) SWITCH_MODULE_LOAD_FUNCTION(mod_java_load)
{ {
switch_status_t status; switch_status_t status;
JavaVMOption *options = NULL; JavaVMOption *options = NULL;
int optionCount = 0; int optionCount = 0;
switch_application_interface_t *app_interface; switch_application_interface_t *app_interface;
*module_interface = switch_loadable_module_create_module_interface(pool, modname); *module_interface = switch_loadable_module_create_module_interface(pool, modname);
SWITCH_ADD_APP(app_interface, "java", NULL, NULL, java_function, NULL, SAF_SUPPORT_NOMEDIA); SWITCH_ADD_APP(app_interface, "java", NULL, NULL, java_function, NULL, SAF_SUPPORT_NOMEDIA);
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Java Framework Loading...\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Java Framework Loading...\n");
if (javaVM != NULL) if (javaVM != NULL)
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
status = switch_core_new_memory_pool(&memoryPool); status = switch_core_new_memory_pool(&memoryPool);
if (status == SWITCH_STATUS_SUCCESS) { if (status == SWITCH_STATUS_SUCCESS)
status = load_config(&options, &optionCount); {
if (status == SWITCH_STATUS_SUCCESS) { status = load_config(&options, &optionCount);
status = create_java_vm(options, optionCount); if (status == SWITCH_STATUS_SUCCESS)
if (status == SWITCH_STATUS_SUCCESS) {
return SWITCH_STATUS_SUCCESS; status = create_java_vm(options, optionCount);
switch_dso_unload(javaVMHandle); if (status == SWITCH_STATUS_SUCCESS)
} return SWITCH_STATUS_SUCCESS;
switch_core_destroy_memory_pool(&memoryPool); switch_dso_unload(javaVMHandle);
} else }
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error creating memory pool\n"); switch_core_destroy_memory_pool(&memoryPool);
}
return status == SWITCH_STATUS_SUCCESS ? SWITCH_STATUS_NOUNLOAD : status; else
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error creating memory pool\n");
return status == SWITCH_STATUS_SUCCESS ? SWITCH_STATUS_NOUNLOAD : status;
} }
SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_java_shutdown) SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_java_shutdown)
{ {
if (javaVM == NULL) if (javaVM == NULL)
return SWITCH_STATUS_FALSE; return SWITCH_STATUS_FALSE;
(*javaVM)->DestroyJavaVM(javaVM); (*javaVM)->DestroyJavaVM(javaVM);
javaVM = NULL; javaVM = NULL;
switch_dso_unload(javaVMHandle); switch_dso_unload(javaVMHandle);
switch_core_destroy_memory_pool(&memoryPool); switch_core_destroy_memory_pool(&memoryPool);
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论