mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-05-20 14:34:27 +00:00
fix potential crash from malformed js
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@5369 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
parent
9c849f1193
commit
a2bcfdbd2f
@ -37,11 +37,33 @@
|
|||||||
#ifdef HAVE_CURL
|
#ifdef HAVE_CURL
|
||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
#endif
|
#endif
|
||||||
|
static int foo = 0;
|
||||||
|
|
||||||
|
|
||||||
SWITCH_MODULE_LOAD_FUNCTION(mod_spidermonkey_load);
|
SWITCH_MODULE_LOAD_FUNCTION(mod_spidermonkey_load);
|
||||||
SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_spidermonkey_shutdown);
|
SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_spidermonkey_shutdown);
|
||||||
SWITCH_MODULE_DEFINITION(mod_spidermonkey, mod_spidermonkey_load, mod_spidermonkey_shutdown, NULL);
|
SWITCH_MODULE_DEFINITION(mod_spidermonkey, mod_spidermonkey_load, mod_spidermonkey_shutdown, NULL);
|
||||||
|
|
||||||
|
#define METHOD_SANITY_CHECK() do { \
|
||||||
|
if (jss->sanity_code != SANITY_CODE_VAL) { \
|
||||||
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid Object! Avoiding Initial SegFault!\n"); \
|
||||||
|
return JS_TRUE; \
|
||||||
|
} \
|
||||||
|
if (!jss || !jss->session) { \
|
||||||
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "You must call the session.originate method before calling this method!\n"); \
|
||||||
|
*rval = BOOLEAN_TO_JSVAL(JS_FALSE); \
|
||||||
|
return JS_TRUE; \
|
||||||
|
} \
|
||||||
|
} while(foo == 1)
|
||||||
|
|
||||||
|
#define CHANNEL_SANITY_CHECK() do { \
|
||||||
|
if (!switch_channel_ready(channel)) { \
|
||||||
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Session is not active!\n"); \
|
||||||
|
*rval = BOOLEAN_TO_JSVAL(JS_FALSE); \
|
||||||
|
return JS_TRUE; \
|
||||||
|
} \
|
||||||
|
} while (foo == 1)
|
||||||
|
|
||||||
static void session_destroy(JSContext * cx, JSObject * obj);
|
static void session_destroy(JSContext * cx, JSObject * obj);
|
||||||
static JSBool session_construct(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval);
|
static JSBool session_construct(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval);
|
||||||
static JSBool session_originate(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval);
|
static JSBool session_originate(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval);
|
||||||
@ -818,11 +840,9 @@ static switch_status_t js_common_callback(switch_core_session_t *session, void *
|
|||||||
uintN argc = 0;
|
uintN argc = 0;
|
||||||
jsval argv[4];
|
jsval argv[4];
|
||||||
JSObject *Event = NULL;
|
JSObject *Event = NULL;
|
||||||
|
jsval nval , *rval = &nval;
|
||||||
|
|
||||||
if (!jss || !jss->session) {
|
METHOD_SANITY_CHECK();
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "You must call the session.originate method before calling this method!\n");
|
|
||||||
return SWITCH_STATUS_FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
jss->stack_depth++;
|
jss->stack_depth++;
|
||||||
|
|
||||||
@ -1012,11 +1032,7 @@ static JSBool session_flush_digits(JSContext * cx, JSObject * obj, uintN argc, j
|
|||||||
switch_size_t has;
|
switch_size_t has;
|
||||||
switch_channel_t *channel;
|
switch_channel_t *channel;
|
||||||
|
|
||||||
if (!jss || !jss->session) {
|
METHOD_SANITY_CHECK();
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "You must call the session.originate method before calling this method!\n");
|
|
||||||
*rval = BOOLEAN_TO_JSVAL(JS_FALSE);
|
|
||||||
return JS_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
channel = switch_core_session_get_channel(jss->session);
|
channel = switch_core_session_get_channel(jss->session);
|
||||||
assert(channel != NULL);
|
assert(channel != NULL);
|
||||||
@ -1067,20 +1083,12 @@ static JSBool session_recordfile(JSContext * cx, JSObject * obj, uintN argc, jsv
|
|||||||
int32 limit = 0;
|
int32 limit = 0;
|
||||||
switch_input_args_t args = { 0 };
|
switch_input_args_t args = { 0 };
|
||||||
|
|
||||||
if (!jss || !jss->session) {
|
METHOD_SANITY_CHECK();
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "You must call the session.originate method before calling this method!\n");
|
|
||||||
*rval = BOOLEAN_TO_JSVAL(JS_FALSE);
|
|
||||||
return JS_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
channel = switch_core_session_get_channel(jss->session);
|
channel = switch_core_session_get_channel(jss->session);
|
||||||
assert(channel != NULL);
|
assert(channel != NULL);
|
||||||
|
|
||||||
if (!switch_channel_ready(channel)) {
|
CHANNEL_SANITY_CHECK();
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Session is not active!\n");
|
|
||||||
*rval = BOOLEAN_TO_JSVAL(JS_FALSE);
|
|
||||||
return JS_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (argc > 0) {
|
if (argc > 0) {
|
||||||
@ -1150,21 +1158,12 @@ static JSBool session_collect_input(JSContext * cx, JSObject * obj, uintN argc,
|
|||||||
switch_input_args_t args = { 0 };
|
switch_input_args_t args = { 0 };
|
||||||
|
|
||||||
|
|
||||||
if (!jss || !jss->session) {
|
METHOD_SANITY_CHECK();
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "You must call the session.originate method before calling this method!\n");
|
|
||||||
*rval = BOOLEAN_TO_JSVAL(JS_FALSE);
|
|
||||||
return JS_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
channel = switch_core_session_get_channel(jss->session);
|
channel = switch_core_session_get_channel(jss->session);
|
||||||
assert(channel != NULL);
|
assert(channel != NULL);
|
||||||
|
|
||||||
if (!switch_channel_ready(channel)) {
|
CHANNEL_SANITY_CHECK();
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Session is not active!\n");
|
|
||||||
*rval = BOOLEAN_TO_JSVAL(JS_FALSE);
|
|
||||||
return JS_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (argc > 0) {
|
if (argc > 0) {
|
||||||
if ((function = JS_ValueToFunction(cx, argv[0]))) {
|
if ((function = JS_ValueToFunction(cx, argv[0]))) {
|
||||||
@ -1217,21 +1216,12 @@ static JSBool session_sayphrase(JSContext * cx, JSObject * obj, uintN argc, jsva
|
|||||||
JSFunction *function;
|
JSFunction *function;
|
||||||
switch_input_args_t args = { 0 };
|
switch_input_args_t args = { 0 };
|
||||||
|
|
||||||
if (!jss || !jss->session) {
|
METHOD_SANITY_CHECK();
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "You must call the session.originate method before calling this method!\n");
|
|
||||||
*rval = BOOLEAN_TO_JSVAL(JS_FALSE);
|
|
||||||
return JS_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
channel = switch_core_session_get_channel(jss->session);
|
channel = switch_core_session_get_channel(jss->session);
|
||||||
assert(channel != NULL);
|
assert(channel != NULL);
|
||||||
|
|
||||||
if (!switch_channel_ready(channel)) {
|
CHANNEL_SANITY_CHECK();
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Session is not active!\n");
|
|
||||||
*rval = BOOLEAN_TO_JSVAL(JS_FALSE);
|
|
||||||
return JS_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (argc > 0) {
|
if (argc > 0) {
|
||||||
phrase_name = JS_GetStringBytes(JS_ValueToString(cx, argv[0]));
|
phrase_name = JS_GetStringBytes(JS_ValueToString(cx, argv[0]));
|
||||||
@ -1360,20 +1350,12 @@ static JSBool session_streamfile(JSContext * cx, JSObject * obj, uintN argc, jsv
|
|||||||
switch_input_args_t args = { 0 };
|
switch_input_args_t args = { 0 };
|
||||||
char *prebuf;
|
char *prebuf;
|
||||||
|
|
||||||
if (!jss || !jss->session) {
|
METHOD_SANITY_CHECK();
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "You must call the session.originate method before calling this method!\n");
|
|
||||||
*rval = BOOLEAN_TO_JSVAL(JS_FALSE);
|
|
||||||
return JS_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
channel = switch_core_session_get_channel(jss->session);
|
channel = switch_core_session_get_channel(jss->session);
|
||||||
assert(channel != NULL);
|
assert(channel != NULL);
|
||||||
|
|
||||||
if (!switch_channel_ready(channel)) {
|
CHANNEL_SANITY_CHECK();
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Session is not active!\n");
|
|
||||||
*rval = BOOLEAN_TO_JSVAL(JS_FALSE);
|
|
||||||
return JS_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (argc > 0) {
|
if (argc > 0) {
|
||||||
@ -1433,11 +1415,7 @@ static JSBool session_set_variable(JSContext * cx, JSObject * obj, uintN argc, j
|
|||||||
struct js_session *jss = JS_GetPrivate(cx, obj);
|
struct js_session *jss = JS_GetPrivate(cx, obj);
|
||||||
switch_channel_t *channel;
|
switch_channel_t *channel;
|
||||||
|
|
||||||
if (!jss || !jss->session) {
|
METHOD_SANITY_CHECK();
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "You must call the session.originate method before calling this method!\n");
|
|
||||||
*rval = BOOLEAN_TO_JSVAL(JS_FALSE);
|
|
||||||
return JS_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
channel = switch_core_session_get_channel(jss->session);
|
channel = switch_core_session_get_channel(jss->session);
|
||||||
assert(channel != NULL);
|
assert(channel != NULL);
|
||||||
@ -1503,21 +1481,12 @@ static JSBool session_speak(JSContext * cx, JSObject * obj, uintN argc, jsval *
|
|||||||
JSFunction *function;
|
JSFunction *function;
|
||||||
switch_input_args_t args = { 0 };
|
switch_input_args_t args = { 0 };
|
||||||
|
|
||||||
if (!jss || !jss->session) {
|
METHOD_SANITY_CHECK();
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "You must call the session.originate method before calling this method!\n");
|
|
||||||
*rval = BOOLEAN_TO_JSVAL(JS_FALSE);
|
|
||||||
return JS_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
channel = switch_core_session_get_channel(jss->session);
|
channel = switch_core_session_get_channel(jss->session);
|
||||||
assert(channel != NULL);
|
assert(channel != NULL);
|
||||||
|
|
||||||
if (!switch_channel_ready(channel)) {
|
CHANNEL_SANITY_CHECK();
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Session is not active!\n");
|
|
||||||
*rval = BOOLEAN_TO_JSVAL(JS_FALSE);
|
|
||||||
return JS_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (argc > 0) {
|
if (argc > 0) {
|
||||||
tts_name = JS_GetStringBytes(JS_ValueToString(cx, argv[0]));
|
tts_name = JS_GetStringBytes(JS_ValueToString(cx, argv[0]));
|
||||||
@ -1571,21 +1540,12 @@ static JSBool session_get_digits(JSContext * cx, JSObject * obj, uintN argc, jsv
|
|||||||
int32 digits = 0, timeout = 5000;
|
int32 digits = 0, timeout = 5000;
|
||||||
switch_channel_t *channel;
|
switch_channel_t *channel;
|
||||||
|
|
||||||
if (!jss || !jss->session) {
|
METHOD_SANITY_CHECK();
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "You must call the session.originate method before calling this method!\n");
|
|
||||||
*rval = BOOLEAN_TO_JSVAL(JS_FALSE);
|
|
||||||
return JS_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
channel = switch_core_session_get_channel(jss->session);
|
channel = switch_core_session_get_channel(jss->session);
|
||||||
assert(channel != NULL);
|
assert(channel != NULL);
|
||||||
|
|
||||||
if (!switch_channel_ready(channel)) {
|
CHANNEL_SANITY_CHECK();
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Session is not active!\n");
|
|
||||||
*rval = BOOLEAN_TO_JSVAL(JS_FALSE);
|
|
||||||
return JS_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (argc > 0) {
|
if (argc > 0) {
|
||||||
char term;
|
char term;
|
||||||
@ -1617,11 +1577,7 @@ static JSBool session_autohangup(JSContext * cx, JSObject * obj, uintN argc, jsv
|
|||||||
struct js_session *jss = JS_GetPrivate(cx, obj);
|
struct js_session *jss = JS_GetPrivate(cx, obj);
|
||||||
*rval = BOOLEAN_TO_JSVAL(JS_FALSE);
|
*rval = BOOLEAN_TO_JSVAL(JS_FALSE);
|
||||||
|
|
||||||
if (!jss || !jss->session) {
|
METHOD_SANITY_CHECK();
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "You must call the session.originate method before calling this method!\n");
|
|
||||||
*rval = BOOLEAN_TO_JSVAL(JS_FALSE);
|
|
||||||
return JS_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (argv[0]) {
|
if (argv[0]) {
|
||||||
JSBool tf;
|
JSBool tf;
|
||||||
@ -1642,21 +1598,12 @@ static JSBool session_answer(JSContext * cx, JSObject * obj, uintN argc, jsval *
|
|||||||
struct js_session *jss = JS_GetPrivate(cx, obj);
|
struct js_session *jss = JS_GetPrivate(cx, obj);
|
||||||
switch_channel_t *channel;
|
switch_channel_t *channel;
|
||||||
|
|
||||||
if (!jss || !jss->session) {
|
METHOD_SANITY_CHECK();
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "You must call the session.originate method before calling this method!\n");
|
|
||||||
*rval = BOOLEAN_TO_JSVAL(JS_FALSE);
|
|
||||||
return JS_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
channel = switch_core_session_get_channel(jss->session);
|
channel = switch_core_session_get_channel(jss->session);
|
||||||
assert(channel != NULL);
|
assert(channel != NULL);
|
||||||
|
|
||||||
if (!switch_channel_ready(channel)) {
|
CHANNEL_SANITY_CHECK();
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Session is not active!\n");
|
|
||||||
*rval = BOOLEAN_TO_JSVAL(JS_FALSE);
|
|
||||||
return JS_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
switch_channel_answer(channel);
|
switch_channel_answer(channel);
|
||||||
return JS_TRUE;
|
return JS_TRUE;
|
||||||
@ -1671,10 +1618,7 @@ static JSBool session_cdr(JSContext * cx, JSObject * obj, uintN argc, jsval * ar
|
|||||||
/*Always a pessimist... sheesh! */
|
/*Always a pessimist... sheesh! */
|
||||||
*rval = BOOLEAN_TO_JSVAL(JS_FALSE);
|
*rval = BOOLEAN_TO_JSVAL(JS_FALSE);
|
||||||
|
|
||||||
if (!jss || !jss->session) {
|
METHOD_SANITY_CHECK();
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "You must call the session.originate method before calling this method!\n");
|
|
||||||
return JS_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (switch_ivr_generate_xml_cdr(jss->session, &cdr) == SWITCH_STATUS_SUCCESS) {
|
if (switch_ivr_generate_xml_cdr(jss->session, &cdr) == SWITCH_STATUS_SUCCESS) {
|
||||||
char *xml_text;
|
char *xml_text;
|
||||||
@ -1693,11 +1637,7 @@ static JSBool session_ready(JSContext * cx, JSObject * obj, uintN argc, jsval *
|
|||||||
struct js_session *jss = JS_GetPrivate(cx, obj);
|
struct js_session *jss = JS_GetPrivate(cx, obj);
|
||||||
switch_channel_t *channel;
|
switch_channel_t *channel;
|
||||||
|
|
||||||
if (!jss || !jss->session) {
|
METHOD_SANITY_CHECK();
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "You must call the session.originate method before calling this method!\n");
|
|
||||||
*rval = BOOLEAN_TO_JSVAL(JS_FALSE);
|
|
||||||
return JS_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
channel = switch_core_session_get_channel(jss->session);
|
channel = switch_core_session_get_channel(jss->session);
|
||||||
assert(channel != NULL);
|
assert(channel != NULL);
|
||||||
@ -1717,11 +1657,7 @@ static JSBool session_wait_for_media(JSContext * cx, JSObject * obj, uintN argc,
|
|||||||
unsigned int elapsed;
|
unsigned int elapsed;
|
||||||
int32 timeout = 60;
|
int32 timeout = 60;
|
||||||
|
|
||||||
if (!jss || !jss->session) {
|
METHOD_SANITY_CHECK();
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "You must call the session.originate method before calling this method!\n");
|
|
||||||
*rval = BOOLEAN_TO_JSVAL(JS_FALSE);
|
|
||||||
return JS_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
channel = switch_core_session_get_channel(jss->session);
|
channel = switch_core_session_get_channel(jss->session);
|
||||||
assert(channel != NULL);
|
assert(channel != NULL);
|
||||||
@ -1760,11 +1696,7 @@ static JSBool session_wait_for_answer(JSContext * cx, JSObject * obj, uintN argc
|
|||||||
unsigned int elapsed;
|
unsigned int elapsed;
|
||||||
int32 timeout = 60;
|
int32 timeout = 60;
|
||||||
|
|
||||||
if (!jss || !jss->session) {
|
METHOD_SANITY_CHECK();
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "You must call the session.originate method before calling this method!\n");
|
|
||||||
*rval = BOOLEAN_TO_JSVAL(JS_FALSE);
|
|
||||||
return JS_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
channel = switch_core_session_get_channel(jss->session);
|
channel = switch_core_session_get_channel(jss->session);
|
||||||
assert(channel != NULL);
|
assert(channel != NULL);
|
||||||
@ -1799,20 +1731,13 @@ static JSBool session_execute(JSContext * cx, JSObject * obj, uintN argc, jsval
|
|||||||
switch_channel_t *channel;
|
switch_channel_t *channel;
|
||||||
struct js_session *jss = JS_GetPrivate(cx, obj);
|
struct js_session *jss = JS_GetPrivate(cx, obj);
|
||||||
|
|
||||||
if (!jss || !jss->session) {
|
METHOD_SANITY_CHECK();
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "You must call the session.originate method before calling this method!\n");
|
|
||||||
*rval = BOOLEAN_TO_JSVAL(JS_FALSE);
|
|
||||||
return JS_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
channel = switch_core_session_get_channel(jss->session);
|
channel = switch_core_session_get_channel(jss->session);
|
||||||
assert(channel != NULL);
|
assert(channel != NULL);
|
||||||
|
|
||||||
if (!switch_channel_ready(channel)) {
|
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Session is not active!\n");
|
CHANNEL_SANITY_CHECK();
|
||||||
*rval = BOOLEAN_TO_JSVAL(JS_FALSE);
|
|
||||||
return JS_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (argc > 1) {
|
if (argc > 1) {
|
||||||
@ -1822,11 +1747,7 @@ static JSBool session_execute(JSContext * cx, JSObject * obj, uintN argc, jsval
|
|||||||
struct js_session *jss = JS_GetPrivate(cx, obj);
|
struct js_session *jss = JS_GetPrivate(cx, obj);
|
||||||
jsrefcount saveDepth;
|
jsrefcount saveDepth;
|
||||||
|
|
||||||
if (!jss || !jss->session) {
|
METHOD_SANITY_CHECK();
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "You must call the session.originate method before calling this method!\n");
|
|
||||||
*rval = BOOLEAN_TO_JSVAL(JS_FALSE);
|
|
||||||
return JS_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((application_interface = switch_loadable_module_get_application_interface(app_name))) {
|
if ((application_interface = switch_loadable_module_get_application_interface(app_name))) {
|
||||||
if (application_interface->application_function) {
|
if (application_interface->application_function) {
|
||||||
@ -1847,11 +1768,7 @@ static JSBool session_get_event(JSContext * cx, JSObject * obj, uintN argc, jsva
|
|||||||
struct js_session *jss = JS_GetPrivate(cx, obj);
|
struct js_session *jss = JS_GetPrivate(cx, obj);
|
||||||
switch_event_t *event;
|
switch_event_t *event;
|
||||||
|
|
||||||
if (!jss || !jss->session) {
|
METHOD_SANITY_CHECK();
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "You must call the session.originate method before calling this method!\n");
|
|
||||||
*rval = BOOLEAN_TO_JSVAL(JS_FALSE);
|
|
||||||
return JS_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (switch_core_session_dequeue_event(jss->session, &event) == SWITCH_STATUS_SUCCESS) {
|
if (switch_core_session_dequeue_event(jss->session, &event) == SWITCH_STATUS_SUCCESS) {
|
||||||
JSObject *Event;
|
JSObject *Event;
|
||||||
@ -1881,11 +1798,7 @@ static JSBool session_send_event(JSContext * cx, JSObject * obj, uintN argc, jsv
|
|||||||
JSObject *Event;
|
JSObject *Event;
|
||||||
struct event_obj *eo;
|
struct event_obj *eo;
|
||||||
|
|
||||||
if (!jss || !jss->session) {
|
METHOD_SANITY_CHECK();
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "You must call the session.originate method before calling this method!\n");
|
|
||||||
*rval = BOOLEAN_TO_JSVAL(JS_FALSE);
|
|
||||||
return JS_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (argc > 0) {
|
if (argc > 0) {
|
||||||
if (JS_ValueToObject(cx, argv[0], &Event)) {
|
if (JS_ValueToObject(cx, argv[0], &Event)) {
|
||||||
@ -1913,20 +1826,12 @@ static JSBool session_hangup(JSContext * cx, JSObject * obj, uintN argc, jsval *
|
|||||||
char *cause_name = NULL;
|
char *cause_name = NULL;
|
||||||
switch_call_cause_t cause = SWITCH_CAUSE_NORMAL_CLEARING;
|
switch_call_cause_t cause = SWITCH_CAUSE_NORMAL_CLEARING;
|
||||||
|
|
||||||
if (!jss || !jss->session) {
|
METHOD_SANITY_CHECK();
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "You must call the session.originate method before calling this method!\n");
|
|
||||||
*rval = BOOLEAN_TO_JSVAL(JS_FALSE);
|
|
||||||
return JS_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
channel = switch_core_session_get_channel(jss->session);
|
channel = switch_core_session_get_channel(jss->session);
|
||||||
assert(channel != NULL);
|
assert(channel != NULL);
|
||||||
|
|
||||||
if (!switch_channel_ready(channel)) {
|
CHANNEL_SANITY_CHECK();
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Session is not active!\n");
|
|
||||||
*rval = BOOLEAN_TO_JSVAL(JS_FALSE);
|
|
||||||
return JS_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (argc > 1) {
|
if (argc > 1) {
|
||||||
cause_name = JS_GetStringBytes(JS_ValueToString(cx, argv[0]));
|
cause_name = JS_GetStringBytes(JS_ValueToString(cx, argv[0]));
|
||||||
@ -2244,6 +2149,7 @@ static JSObject *new_js_session(JSContext * cx, JSObject * obj, switch_core_sess
|
|||||||
jss->cx = cx;
|
jss->cx = cx;
|
||||||
jss->obj = session_obj;
|
jss->obj = session_obj;
|
||||||
jss->stack_depth = 0;
|
jss->stack_depth = 0;
|
||||||
|
jss->sanity_code = SANITY_CODE_VAL;
|
||||||
if ((JS_SetPrivate(cx, session_obj, jss) &&
|
if ((JS_SetPrivate(cx, session_obj, jss) &&
|
||||||
JS_DefineProperties(cx, session_obj, session_props) && JS_DefineFunctions(cx, session_obj, session_methods))) {
|
JS_DefineProperties(cx, session_obj, session_props) && JS_DefineFunctions(cx, session_obj, session_methods))) {
|
||||||
return session_obj;
|
return session_obj;
|
||||||
@ -2264,6 +2170,7 @@ static JSBool session_construct(JSContext * cx, JSObject * obj, uintN argc, jsva
|
|||||||
memset(jss, 0, sizeof(*jss));
|
memset(jss, 0, sizeof(*jss));
|
||||||
jss->cx = cx;
|
jss->cx = cx;
|
||||||
jss->obj = obj;
|
jss->obj = obj;
|
||||||
|
jss->sanity_code = SANITY_CODE_VAL;
|
||||||
switch_set_flag(jss, S_FREE);
|
switch_set_flag(jss, S_FREE);
|
||||||
|
|
||||||
JS_SetPrivate(cx, obj, jss);
|
JS_SetPrivate(cx, obj, jss);
|
||||||
|
@ -122,6 +122,7 @@ struct sm_module_interface {
|
|||||||
typedef struct sm_module_interface sm_module_interface_t;
|
typedef struct sm_module_interface sm_module_interface_t;
|
||||||
typedef switch_status_t (*spidermonkey_init_t) (const sm_module_interface_t ** module_interface);
|
typedef switch_status_t (*spidermonkey_init_t) (const sm_module_interface_t ** module_interface);
|
||||||
|
|
||||||
|
#define SANITY_CODE_VAL 424242
|
||||||
struct js_session {
|
struct js_session {
|
||||||
switch_core_session_t *session;
|
switch_core_session_t *session;
|
||||||
JSContext *cx;
|
JSContext *cx;
|
||||||
@ -131,6 +132,7 @@ struct js_session {
|
|||||||
JSFunction *on_hangup;
|
JSFunction *on_hangup;
|
||||||
int stack_depth;
|
int stack_depth;
|
||||||
switch_channel_state_t hook_state;
|
switch_channel_state_t hook_state;
|
||||||
|
int sanity_code;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user