jsval ret = JS_TRUE;
char *resp;
- if (!jss->check_state && jss->on_hangup && (jss->hook_state == CS_HANGUP || jss->hook_state == CS_ROUTING)) {
+ if (jss && !jss->check_state && jss->on_hangup && (jss->hook_state == CS_HANGUP || jss->hook_state == CS_ROUTING)) {
jss->check_state++;
argv[argc++] = OBJECT_TO_JSVAL(jss->obj);
if (jss->hook_state == CS_HANGUP) {
if ((jss = switch_channel_get_private(channel, "jss"))) {
switch_channel_state_t state = switch_channel_get_state(channel);
+ if (state > CS_HANGUP) {
+ state = CS_HANGUP;
+ }
if (jss->hook_state != state) {
jss->hook_state = state;
jss->check_state = 0;
METHOD_SANITY_CHECK();
channel = switch_core_session_get_channel(jss->session);
- CHANNEL_SANITY_CHECK();
+ //CHANNEL_SANITY_CHECK();
- if (argc > 1) {
- if (JSVAL_IS_INT(argv[0])) {
- int32 i = 0;
- JS_ValueToInt32(cx, argv[0], &i);
- cause = i;
- } else {
- cause_name = JS_GetStringBytes(JS_ValueToString(cx, argv[0]));
- cause = switch_channel_str2cause(cause_name);
+ if (switch_channel_up(channel)) {
+ if (argc > 1) {
+ if (JSVAL_IS_INT(argv[0])) {
+ int32 i = 0;
+ JS_ValueToInt32(cx, argv[0], &i);
+ cause = i;
+ } else {
+ cause_name = JS_GetStringBytes(JS_ValueToString(cx, argv[0]));
+ cause = switch_channel_str2cause(cause_name);
+ }
}
+
+ switch_channel_hangup(channel, cause);
+ switch_core_session_kill_channel(jss->session, SWITCH_SIG_KILL);
}
- switch_channel_hangup(channel, cause);
- switch_core_session_kill_channel(jss->session, SWITCH_SIG_KILL);
return JS_TRUE;
}
if (cx && obj) {
if ((jss = JS_GetPrivate(cx, obj))) {
+ jsval rval;
+
+ check_hangup_hook(jss, &rval);
+
JS_SetPrivate(cx, obj, NULL);
if (jss->speech && *jss->speech->sh.name) {
destroy_speech_engine(jss);
const char *script;
int argc = 0, x = 0, y = 0;
unsigned int flags = 0;
- struct js_session *jss;
+ struct js_session *jss = NULL;
JSContext *cx = NULL;
jsval rval;
runtime.max_dtmf_duration = SWITCH_MAX_DTMF_DURATION;
runtime.default_dtmf_duration = SWITCH_DEFAULT_DTMF_DURATION;
runtime.min_dtmf_duration = SWITCH_MIN_DTMF_DURATION;
+ switch_set_flag((&runtime), SCF_NO_NEW_SESSIONS);
/* INIT APR and Create the pool context */
if (apr_initialize() != SWITCH_STATUS_SUCCESS) {