char uuid_str[SWITCH_UUID_FORMATTED_LENGTH + 1];
char var_name[SWITCH_UUID_FORMATTED_LENGTH + 25];
char *p;
+ switch_status_t status = SWITCH_STATUS_FALSE;
- METHOD_SANITY_CHECK();
-
- jss->stack_depth++;
+ if (!jss || !jss->session) {
+ return SWITCH_STATUS_FALSE;
+ }
+ if (++jss->stack_depth > MAX_STACK_DEPTH) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Maximum recursive callback limit %d reached.\n", MAX_STACK_DEPTH);
+ jss->stack_depth--;
+ return SWITCH_STATUS_FALSE;
+ }
switch_uuid_get(&uuid);
switch_uuid_format(uuid_str, &uuid);
}
}
+ JS_ResumeRequest(cb_state->cx, cb_state->saveDepth);
+ METHOD_SANITY_CHECK();
+
if (cb_state->jss_a && cb_state->jss_a->session && cb_state->jss_a->session == session) {
argv[argc++] = OBJECT_TO_JSVAL(cb_state->session_obj_a);
} else if (cb_state->jss_b && cb_state->jss_b->session && cb_state->jss_b->session == session) {
}
}
if (!Event) {
- jss->stack_depth--;
- return SWITCH_STATUS_FALSE;
+ goto done;
}
break;
case SWITCH_INPUT_TYPE_DTMF:
argv[argc++] = STRING_TO_JSVAL(JS_NewStringCopyZ(cb_state->cx, "dtmf"));
argv[argc++] = OBJECT_TO_JSVAL(Event);
} else {
- jss->stack_depth--;
- return SWITCH_STATUS_FALSE;
+ goto done;
}
}
}
argv[argc++] = cb_state->arg;
}
- if (jss->stack_depth > MAX_STACK_DEPTH) {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Maximum recursive callback limit %d reached.\n", MAX_STACK_DEPTH);
- jss->stack_depth--;
- return SWITCH_STATUS_FALSE;
- }
-
- JS_ResumeRequest(cb_state->cx, cb_state->saveDepth);
check_hangup_hook(jss, &ret);
- cb_state->saveDepth = JS_SuspendRequest(cb_state->cx);
if (ret == JS_TRUE) {
- JS_ResumeRequest(cb_state->cx, cb_state->saveDepth);
JS_CallFunction(cb_state->cx, cb_state->obj, cb_state->function, argc, argv, &cb_state->ret);
- cb_state->saveDepth = JS_SuspendRequest(cb_state->cx);
- jss->stack_depth--;
}
- return SWITCH_STATUS_SUCCESS;
+ status = SWITCH_STATUS_SUCCESS;
+done:
+ cb_state->saveDepth = JS_SuspendRequest(cb_state->cx);
+ jss->stack_depth--;
+ return status;
}
static switch_status_t js_stream_input_callback(switch_core_session_t *session, void *input, switch_input_type_t itype, void *buf, unsigned int buflen)