diff options
Diffstat (limited to 'source4/web_server')
-rw-r--r-- | source4/web_server/calls.c | 72 | ||||
-rw-r--r-- | source4/web_server/config.mk | 3 | ||||
-rw-r--r-- | source4/web_server/ejs/ejs.c | 4 | ||||
-rw-r--r-- | source4/web_server/ejs/ejs.h | 4 | ||||
-rw-r--r-- | source4/web_server/esp/esp.c | 6 | ||||
-rw-r--r-- | source4/web_server/esp/esp.h | 6 | ||||
-rw-r--r-- | source4/web_server/http.c | 2 |
7 files changed, 86 insertions, 11 deletions
diff --git a/source4/web_server/calls.c b/source4/web_server/calls.c new file mode 100644 index 0000000000..8cd0c21b1c --- /dev/null +++ b/source4/web_server/calls.c @@ -0,0 +1,72 @@ +/* + Unix SMB/CIFS implementation. + + provide hooks into C calls from esp scripts + + Copyright (C) Andrew Tridgell 2005 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include "includes.h" +#include "web_server/esp/esp.h" + + +/* + return the type of a variable +*/ +static int esp_typeof(struct EspRequest *ep, int argc, struct MprVar **argv) +{ + const struct { + MprType type; + const char *name; + } types[] = { + { MPR_TYPE_UNDEFINED, "undefined" }, + { MPR_TYPE_NULL, "null" }, + { MPR_TYPE_BOOL, "boolean" }, + { MPR_TYPE_CFUNCTION, "function" }, + { MPR_TYPE_FLOAT, "float" }, + { MPR_TYPE_INT, "int" }, + { MPR_TYPE_INT64, "int64" }, + { MPR_TYPE_OBJECT, "object" }, + { MPR_TYPE_FUNCTION, "function" }, + { MPR_TYPE_STRING, "string" }, + { MPR_TYPE_STRING_CFUNCTION, "function" } + }; + int i; + const char *type = "unknown"; + + if (argc != 1) return -1; + + for (i=0;i<ARRAY_SIZE(types);i++) { + if (argv[0]->type == types[i].type) { + type = types[i].name; + break; + } + } + + espSetReturnString(ep, type); + return 0; +} + + +/* + setup the C functions that be called from ejs +*/ +void http_setup_ejs_functions(void) +{ + espDefineStringCFunction(NULL, "lpGet", esp_lpGet, NULL); + espDefineCFunction(NULL, "typeof", esp_typeof, NULL); +} diff --git a/source4/web_server/config.mk b/source4/web_server/config.mk index 34d8aff1e6..b287b4f153 100644 --- a/source4/web_server/config.mk +++ b/source4/web_server/config.mk @@ -33,7 +33,8 @@ NOPROTO=YES INIT_OBJ_FILES = \ web_server/web_server.o ADD_OBJ_FILES = \ - web_server/http.o + web_server/http.o \ + web_server/calls.o REQUIRED_SUBSYSTEMS = ESP # End SUBSYSTEM WEB ####################### diff --git a/source4/web_server/ejs/ejs.c b/source4/web_server/ejs/ejs.c index 2d85ad1330..4f5eb6b129 100644 --- a/source4/web_server/ejs/ejs.c +++ b/source4/web_server/ejs/ejs.c @@ -754,7 +754,7 @@ MprVar *ejsGetReturnValue(EjsId eid) * or "[]". */ -void ejsDefineCFunction(EjsId eid, char *functionName, MprCFunction fn, +void ejsDefineCFunction(EjsId eid, const char *functionName, MprCFunction fn, void *thisPtr, int flags) { if (eid < 0) { @@ -793,7 +793,7 @@ void ejsDefineStringCFunction(EjsId eid, const char *functionName, * Body should not contain braces. */ -void ejsDefineFunction(EjsId eid, char *functionName, char *args, char *body) +void ejsDefineFunction(EjsId eid, const char *functionName, char *args, char *body) { MprVar v; diff --git a/source4/web_server/ejs/ejs.h b/source4/web_server/ejs/ejs.h index c1d087cf61..60aa93a408 100644 --- a/source4/web_server/ejs/ejs.h +++ b/source4/web_server/ejs/ejs.h @@ -99,9 +99,9 @@ extern MprVar *ejsGetGlobalObject(EjsId eid); /* * Function routines */ -extern void ejsDefineFunction(EjsId eid, char *functionName, char *args, +extern void ejsDefineFunction(EjsId eid, const char *functionName, char *args, char *body); -extern void ejsDefineCFunction(EjsId eid, char *functionName, +extern void ejsDefineCFunction(EjsId eid, const char *functionName, MprCFunction fn, void *thisPtr, int flags); extern void ejsDefineStringCFunction(EjsId eid, const char *functionName, MprStringCFunction fn, void *thisPtr, int flags); diff --git a/source4/web_server/esp/esp.c b/source4/web_server/esp/esp.c index 3e370cb020..c90e4afe42 100644 --- a/source4/web_server/esp/esp.c +++ b/source4/web_server/esp/esp.c @@ -218,7 +218,7 @@ void espDestroyRequest(EspRequest *ep) * rq = (requiredCast) espGetHandle(ep); */ -void espDefineCFunction(EspRequest *ep, char *functionName, EspCFunction fn, +void espDefineCFunction(EspRequest *ep, const char *functionName, EspCFunction fn, void *thisPtr) { mprAssert(functionName && *functionName); @@ -389,7 +389,7 @@ void espSetReturn(EspRequest *ep, MprVar value) /******************************************************************************/ -void espSetReturnString(EspRequest *ep, char *str) +void espSetReturnString(EspRequest *ep, const char *str) { mprAssert(ep); @@ -866,7 +866,7 @@ MprVar *espCreatePropertyValue(MprVar *obj, char *property, MprVar newValue) /******************************************************************************/ -void espDefineFunction(EspRequest *ep, char *functionName, char *args, char *body) +void espDefineFunction(EspRequest *ep, const char *functionName, char *args, char *body) { ejsDefineFunction(ep->eid, functionName, args, body); } diff --git a/source4/web_server/esp/esp.h b/source4/web_server/esp/esp.h index 9e58bdf066..a6cac1e852 100644 --- a/source4/web_server/esp/esp.h +++ b/source4/web_server/esp/esp.h @@ -159,9 +159,9 @@ extern int espProcessRequest(EspRequest *ep, const char *docPath, /* * Method invocation */ -extern void espDefineCFunction(EspRequest *ep, char *functionName, +extern void espDefineCFunction(EspRequest *ep, const char *functionName, EspCFunction fn, void *thisPtr); -extern void espDefineFunction(EspRequest *ep, char *functionName, +extern void espDefineFunction(EspRequest *ep, const char *functionName, char *args, char *body); extern void espDefineStringCFunction(EspRequest *ep, const char *functionName, EspStringCFunction fn, @@ -188,7 +188,7 @@ extern EjsId espGetScriptHandle(EspRequest *ep); extern void espRedirect(EspRequest *ep, int code, char *url); extern void espSetHeader(EspRequest *ep, char *header, bool allowMultiple); -extern void espSetReturnString(EspRequest *ep, char *str); +extern void espSetReturnString(EspRequest *ep, const char *str); extern int espWrite(EspRequest *ep, char *buf, int size); extern int espWriteString(EspRequest *ep, char *buf); extern int espWriteFmt(EspRequest *ep, char *fmt, ...); diff --git a/source4/web_server/http.c b/source4/web_server/http.c index fd9b1be67f..d9d441f765 100644 --- a/source4/web_server/http.c +++ b/source4/web_server/http.c @@ -720,6 +720,8 @@ void http_process_input(struct websrv_context *web) talloc_set_destructor(esp, esp_destructor); + http_setup_ejs_functions(); + esp->req = espCreateRequest(web, web->input.url, esp->variables); if (esp->req == NULL) goto internal_error; |