]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
add exceptions to js and make invalid session access fatal + exception for a try...
authorAnthony Minessale <anthony.minessale@gmail.com>
Fri, 22 Jun 2007 19:59:57 +0000 (19:59 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Fri, 22 Jun 2007 19:59:57 +0000 (19:59 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@5443 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/mod/languages/mod_spidermonkey/mod_spidermonkey.c
src/mod/languages/mod_spidermonkey/mod_spidermonkey.h
src/mod/languages/mod_spidermonkey_core_db/mod_spidermonkey_core_db.c
src/mod/languages/mod_spidermonkey_odbc/mod_spidermonkey_odbc.c

index 450af276791c136d9593fdcda35c020148ae06a9..8bcdbe427e72def5bcf3d717e6259f6c959a068a 100644 (file)
@@ -44,19 +44,19 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_spidermonkey_load);
 SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_spidermonkey_shutdown);
 SWITCH_MODULE_DEFINITION(mod_spidermonkey, mod_spidermonkey_load, mod_spidermonkey_shutdown, NULL);
 
-#define METHOD_SANITY_CHECK() do {                                                                                             \
+#define METHOD_SANITY_CHECK() do {                                                                             \
 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"); \
+       eval_some_js("~throw new Error(\"You must call the session.originate method before calling this method!\");", cx, obj, rval); \
        *rval = BOOLEAN_TO_JSVAL(JS_FALSE);                                                                     \
-       return JS_TRUE;                                                                                                         \
+       return JS_FALSE;                                                                                                        \
  }                                                                                                                                             \
        } while(foo == 1)
 
-#define CHANNEL_SANITY_CHECK() do {                            \
+#define CHANNEL_SANITY_CHECK() do {                                                                            \
                if (!switch_channel_ready(channel)) {                                                   \
-                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Session is not active!\n"); \
+                       eval_some_js("~throw new Error(\"Session is not active!\");", cx, obj, rval); \
                        *rval = BOOLEAN_TO_JSVAL(JS_FALSE);                                                     \
-                       return JS_TRUE;                                                                                         \
+                       return JS_FALSE;                                                                                        \
                }                                                                                                                               \
        } while (foo == 1)
 
@@ -838,6 +838,9 @@ static switch_status_t js_common_callback(switch_core_session_t *session, void *
        jsval argv[4];
        JSObject *Event = NULL;
        jsval nval , *rval = &nval; 
+       JSContext *cx = cb_state->cx;
+       JSObject *obj = cb_state->obj;
+       
 
        METHOD_SANITY_CHECK();
 
@@ -2561,6 +2564,13 @@ JSClass fileio_class = {
 /*********************************************************************************/
 static JSBool js_exit(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
 {
+       char *supplied_error, code_buf[256] = "";
+       
+       if (argc > 0 && (supplied_error = JS_GetStringBytes(JS_ValueToString(cx, argv[0])))) {
+               snprintf(code_buf, sizeof(code_buf), "~throw new Error(\"%s\");", supplied_error);
+               eval_some_js(code_buf, cx, obj, rval);
+       }
+
        return JS_FALSE;
 }
 
index 1bee4e82cef874d15f628a3f265b06d11bb7149e..c0d357ee87001d7aeee4810c801283a756d66416 100644 (file)
@@ -145,6 +145,7 @@ struct js_session {
 
 JSBool DEFAULT_SET_PROPERTY(JSContext * cx, JSObject *obj, jsval id, jsval *vp)
 {
+       eval_some_js("~throw new Error(\"this property cannot be changed!\");", cx, obj, vp);
        return JS_FALSE;
 }
 
index aa71b43fa974731a4550e008bb01cdb58b689839..b5f4e3368cb66d3386b648dfd9b38e71a8d6406c 100644 (file)
@@ -247,6 +247,7 @@ static JSBool db_setProperty(JSContext * cx, JSObject * obj, jsval id, jsval *vp
        char *name = JS_GetStringBytes(JS_ValueToString(cx, id));
 
        if (strcmp(name, "_dB_RoW_DaTa_")) {
+               eval_some_js("~throw new Error(\"this property cannot be changed!\");", cx, obj, vp);
                *vp = BOOLEAN_TO_JSVAL(JS_FALSE);
        }
        return JS_TRUE;
index ae89165cbf084fa7587f60eff2a33d738b981461..7d10073366c6214821d876d5bac0dc8249fcd460 100644 (file)
@@ -433,6 +433,7 @@ static JSBool odbc_setProperty(JSContext * cx, JSObject * obj, jsval id, jsval *
        char *name = JS_GetStringBytes(JS_ValueToString(cx, id));
 
        if (strcmp(name, "_oDbC_dB_RoW_DaTa_")) {
+               eval_some_js("~throw new Error(\"this property cannot be changed!\");", cx, obj, vp);
                *vp = BOOLEAN_TO_JSVAL(JS_FALSE);
        }
        return JS_TRUE;