summaryrefslogtreecommitdiff
path: root/source4/web_server
diff options
context:
space:
mode:
Diffstat (limited to 'source4/web_server')
-rw-r--r--source4/web_server/calls.c72
-rw-r--r--source4/web_server/config.mk3
-rw-r--r--source4/web_server/ejs/ejs.c4
-rw-r--r--source4/web_server/ejs/ejs.h4
-rw-r--r--source4/web_server/esp/esp.c6
-rw-r--r--source4/web_server/esp/esp.h6
-rw-r--r--source4/web_server/http.c2
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;