summaryrefslogtreecommitdiff
path: root/trunk/ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/frame/func.h
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/frame/func.h')
-rw-r--r--trunk/ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/frame/func.h111
1 files changed, 111 insertions, 0 deletions
diff --git a/trunk/ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/frame/func.h b/trunk/ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/frame/func.h
new file mode 100644
index 00000000000..111ffd3a375
--- /dev/null
+++ b/trunk/ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/frame/func.h
@@ -0,0 +1,111 @@
+/*
+ * $Id$
+ *
+ * Copyright (c) 1994, 1995. Netscape Communications Corporation. All
+ * rights reserved.
+ *
+ * Use of this software is governed by the terms of the license agreement for
+ * the Netscape Communications or Netscape Comemrce Server between the
+ * parties.
+ */
+
+
+/* ------------------------------------------------------------------------ */
+
+
+/*
+ * func.h: Handles the function hash table
+ *
+ * httpd uses a table of internal functions hashed by a name string such that
+ * users can reference specific functions from the configuration files.
+ *
+ * Any function referenced by configuration files will be passed a
+ * parameter, a Request structure. The functions do not return anything.
+ *
+ * Rob McCool
+ */
+
+#ifndef FUNC_H
+#define FUNC_H
+
+
+#include "netsite.h"
+#include "base/pblock.h"
+#include "base/session.h" /* Session structure */
+#include "frame/req.h" /* Request structure */
+
+
+/* -------------------------- Structure and Type -------------------------- */
+
+
+/*
+ * FuncPtr is a pointer to our kind of functions
+ */
+
+typedef int Func(pblock *, Session *, Request *);
+typedef Func *FuncPtr;
+
+/*
+ * FuncStruct is a structure used in the static declaration of the
+ * functions. This static declaration is parsed into a hash table at
+ * startup. You should initialize the next entry to NULL.
+ */
+
+struct FuncStruct {
+ char *name;
+ FuncPtr func;
+ struct FuncStruct *next;
+};
+
+
+/* --------------------------- Hash definitions --------------------------- */
+
+
+/*
+ * This is a primitive hash function. Once more is known about the names of
+ * the functions, this will be optimized.
+ */
+
+#define NUM_HASH 20
+#define FUNC_HASH(s) (s[0] % NUM_HASH)
+
+
+/* ------------------------------ Prototypes ------------------------------ */
+
+
+/*
+ * func_init reads the static FuncStruct arrays and creates the global
+ * function table from them.
+ *
+ * func_init will only read from the static arrays defined in func.c.
+ */
+
+void func_init(void);
+
+/*
+ * func_find returns a pointer to the function named name, or NULL if none
+ * exists.
+ */
+
+FuncPtr func_find(char *name);
+
+/*
+ * func_exec will try to execute the function whose name is the "fn" entry
+ * in the given pblock. If name is not found, it will log a misconfig of
+ * missing fn parameter. If it can't find it, it will log that. In these
+ * cases it will return REQ_ABORTED. Otherwise, it will return what the
+ * function being executed returns.
+ */
+
+int func_exec(pblock *pb, Session *sn, Request *rq);
+
+/*
+ * func_insert dynamically inserts a named function into the server's
+ * table of functions. Returns the FuncStruct it keeps in internal
+ * databases, because on server restart you are responsible for freeing
+ * (or not) its contents.
+ */
+
+struct FuncStruct *func_insert(char *name, FuncPtr fn);
+
+#endif