|
|
int Ns_RegisterShtmlCmd (
char *hServer,
char *cmd,
Ns_ShtmlCmdProc *proc,
void *context
);
typedef int (Ns_ShtmlCmdProc) (
Ns_ParseHandle *handle,
void *context
);
cmd on the specified server. The proc argument (of type Ns_ShtmlCmdProc) is the function that performs the command. Inside an Ns_ShtmlCmdProc, you can use the following constructs: EXTERN int Ns_ParseAppend(Ns_ParseHandle *handle, char *data);
EXTERN int Ns_ParseVarAppend(Ns_ParseHandle *handle,...);
EXTERN int Ns_ParsePrintf(Ns_ParseHandle *handle, char *fmt,..);
#define Ns_ParseConn(handle) ((handle)->conn)
#define Ns_ParseOptions(handle) ((handle)->options)
#define Ns_ParseFilename(handle) ((handle)->filename)
#define Ns_ParseByteOffset(handle) ((handle)->byteoffset)
#define Ns_ParseConfig(handle) ((handle)->config)
#define Ns_ParseParams(handle) ((handle)->params)
The return value of the proc is an HTTP status.
nstcl server-parsed HTML command. It illustrates the use of the Ns_RegisterShtmlCmd function. Ns_RegisterShtmlCmd(hServer, "nstcl", cmdNstcl, NULL);
static int
cmdNstcl(Ns_ParseHandle * handle, void *context)
{
int status;
char *script;
status = 500;
if ((script = Ns_SetGet(handle->params, "script")) != NULL) {
Ns_DString dsBuf;
Ns_DStringInit(&dsBuf);
if (Ns_TclEval(&dsBuf, Ns_ConnServer(handle->conn),
script)!= NS_ERROR) {
Ns_ParseAppend(handle, dsBuf.string);
status = 200;
} else {
Ns_Log(Error,
"ParseHTML: Tcl script \"%s\" encountered an
error.", script);
}
Ns_DStringFree(&dsBuf);
} else {
Ns_Log(Error,
"ParseHTML: No Tcl script specified near byte"
" offset %d.", handle->byteoffset);
}
return status;
}