summaryrefslogtreecommitdiffstats
path: root/cpukit/httpd/uemf.h
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2000-09-01 10:57:21 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2000-09-01 10:57:21 +0000
commita6b4c0df5f74d1238337f41d1d13f4f168ad01f1 (patch)
treeae171319a76a707e9f3aa638b7c690e40c9f5d5e /cpukit/httpd/uemf.h
parent2000-08-31 Ralf Corsepius <corsepiu@faw.uni-ulm.de> (diff)
downloadrtems-a6b4c0df5f74d1238337f41d1d13f4f168ad01f1.tar.bz2
2000-08-30 Joel Sherrill <joel@OARcorp.com>
* Merged version 2.1 of GoAhead webserver. This update was submitted by Antti P Miettinen <antti.p.miettinen@nokia.com>. * NOTES, base64.c, ejIntrn.h, emfdb.c, emfdb.h, md5.h, md5c.c, um.c, um.h: New files. * wbase64.c: Removed. * Makefile.am, asp.c, balloc.c, default.c, ej.h, ejlex.c, ejparse.c, form.c, h.c, handler.c, mime.c, misc.c, ringq.c, rom.c, security.c, socket.c, sym.c, uemf.c, uemf.h, url.c, value.c, webcomp.c, webmain.c, webpage.c, webrom.c, webs.c, webs.h, websuemf.c, wsIntrn.h: Modified.
Diffstat (limited to 'cpukit/httpd/uemf.h')
-rw-r--r--cpukit/httpd/uemf.h831
1 files changed, 603 insertions, 228 deletions
diff --git a/cpukit/httpd/uemf.h b/cpukit/httpd/uemf.h
index 8945907dfb..59533aac00 100644
--- a/cpukit/httpd/uemf.h
+++ b/cpukit/httpd/uemf.h
@@ -1,7 +1,7 @@
/*
- * uemf.h -- Go Ahead Micro Embedded Management Framework Header
+ * uemf.h -- GoAhead Micro Embedded Management Framework Header
*
- * Copyright (c) Go Ahead Software, Inc., 1995-1999
+ * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
*
* See the file "license.txt" for usage and redistribution license requirements
*/
@@ -12,7 +12,7 @@
/******************************** Description *********************************/
/*
- * Go Ahead Web Server header. This defines the Web public APIs
+ * GoAhead Web Server header. This defines the Web public APIs
*/
/******************************* Per O/S Includes *****************************/
@@ -29,7 +29,9 @@
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
-#endif
+ #include <fcntl.h>
+ #include <errno.h>
+#endif /* WIN */
#if CE
#include <limits.h>
@@ -37,15 +39,26 @@
#include <windows.h>
#include <winnls.h>
#include "CE/wincompat.h"
-#endif
+ #include <winsock.h>
+#endif /* CE */
#if NW
#include <stdio.h>
-#endif
+#endif /* NW */
+
+#if SCOV5
+ #include <sys/types.h>
+ #include <stdio.h>
+ #include "sys/socket.h"
+ #include "sys/select.h"
+ #include "netinet/in.h"
+ #include "arpa/inet.h"
+ #include "netdb.h"
+#endif /* SCOV5 */
#if UNIX
#include <stdio.h>
-#endif
+#endif /* UNIX */
#if LINUX || __rtems__
#include <sys/types.h>
@@ -61,7 +74,9 @@
#include <arpa/inet.h>
#include <netdb.h>
#include <time.h>
-#endif
+ #include <fcntl.h>
+ #include <errno.h>
+#endif /* LINUX */
#if LYNX
#include <limits.h>
@@ -74,13 +89,15 @@
#include <arpa/inet.h>
#include <netdb.h>
#include <time.h>
-#endif
+ #include <fcntl.h>
+ #include <errno.h>
+#endif /* LYNX */
#if UW
#include <stdio.h>
-#endif
+#endif /* UW */
-#if VXW486
+#if VXWORKS
#include <vxWorks.h>
#include <sockLib.h>
#include <selectLib.h>
@@ -90,7 +107,25 @@
#include <stat.h>
#include <time.h>
#include <usrLib.h>
-#endif
+ #include <fcntl.h>
+ #include <errno.h>
+#endif /* VXWORKS */
+
+#if SOLARIS
+ #include <sys/types.h>
+ #include <limits.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <unistd.h>
+ #include <socket.h>
+ #include <sys/select.h>
+ #include <netinet/in.h>
+ #include <arpa/inet.h>
+ #include <netdb.h>
+ #include <time.h>
+ #include <fcntl.h>
+ #include <errno.h>
+#endif /* SOLARIS */
#if QNX4
#include <sys/types.h>
@@ -100,7 +135,20 @@
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
-#endif
+ #include <stdlib.h>
+ #include <unistd.h>
+ #include <sys/uio.h>
+ #include <sys/wait.h>
+#endif /* QNX4 */
+
+#if ECOS
+ #include <limits.h>
+ #include <cyg/infra/cyg_type.h>
+ #include <cyg/kernel/kapi.h>
+ #include <time.h>
+ #include <network.h>
+ #include <errno.h>
+#endif /* ECOS */
/********************************** Includes **********************************/
@@ -108,6 +156,69 @@
#include <stdarg.h>
#include <string.h>
+#if ! WEBS
+#include "messages.h"
+#endif /* ! WEBS */
+
+/******************************* Per O/S Defines *****************************/
+
+#if UW
+ #define __NO_PACK 1
+#endif /* UW */
+
+#if SCOV5 || VXWORKS || LINUX || LYNX || __rtems__
+#ifndef O_BINARY
+#define O_BINARY 0
+#endif /* O_BINARY */
+#define SOCKET_ERROR -1
+#endif /* SCOV5 || VXWORKS || LINUX || LYNX */
+
+#if WIN || CE
+/*
+ * __NO_FCNTL means can't access fcntl function. Fcntl.h is still available.
+ */
+#define __NO_FCNTL 1
+
+#undef R_OK
+#define R_OK 4
+#undef W_OK
+#define W_OK 2
+#undef X_OK
+#define X_OK 1
+#undef F_OK
+#define F_OK 0
+#endif /* WIN || CE */
+
+#if LINUX && !__rtems__ && ! _STRUCT_TIMEVAL
+struct timeval
+{
+ time_t tv_sec; /* Seconds. */
+ time_t tv_usec; /* Microseconds. */
+};
+#define _STRUCT_TIMEVAL 1
+#endif /* LINUX && ! _STRUCT_TIMEVAL */
+
+#if ECOS
+ #define O_RDONLY 1
+ #define O_BINARY 2
+
+ #define __NO_PACK 1
+ #define __NO_EJ_FILE 1
+ #define __NO_CGI_BIN 1
+ #define __NO_FCNTL 1
+
+/*
+ * #define LIBKERN_INLINE to avoid kernel inline functions
+ */
+ #define LIBKERN_INLINE
+
+#endif /* ECOS */
+
+#if QNX4
+ typedef long fd_mask;
+ #define NFDBITS (sizeof (fd_mask) * NBBY) /* bits per mask */
+#endif /* QNX4 */
+
/********************************** Unicode ***********************************/
/*
* Constants and limits. Also FNAMESIZE and PATHSIZE are currently defined
@@ -119,34 +230,85 @@
#define XML_MAX 4096 /* Maximum size for tags/tokens */
#define BUF_MAX 4096 /* General sanity check for bufs */
-/*
- * Type for unicode systems
- */
-#if UNICODE
+#if LITTLEFOOT || WEBS
+#define LF_BUF_MAX (510)
+#define LF_PATHSIZE LF_BUF_MAX
+#else
+#define LF_BUF_MAX BUF_MAX
+#define LF_PATHSIZE PATHSIZE
+#define UPPATHSIZE PATHSIZE
+#endif /* LITTLEFOOT || WEBS */
+#ifndef CHAR_T_DEFINED
+#define CHAR_T_DEFINED 1
+#if UNICODE
/*
* To convert strings to UNICODE. We have a level of indirection so things
* like T(__FILE__) will expand properly.
*/
-#define T(x) __TXT(x)
-#define __TXT(s) L ## s
-typedef unsigned short char_t;
-typedef unsigned short uchar_t;
+#define T(x) __TXT(x)
+#define __TXT(s) L ## s
+typedef unsigned short char_t;
+typedef unsigned short uchar_t;
/*
* Text size of buffer macro. A buffer bytes will hold (size / char size)
* characters.
*/
-#define TSZ(x) (sizeof(x) / sizeof(char_t))
+#define TSZ(x) (sizeof(x) / sizeof(char_t))
/*
* How many ASCII bytes are required to represent this UNICODE string?
*/
-#define TASTRL(x) ((wcslen(x) + 1) * sizeof(char_t))
+#define TASTRL(x) ((wcslen(x) + 1) * sizeof(char_t))
+
+#else
+#define T(s) s
+typedef char char_t;
+#define TSZ(x) (sizeof(x))
+#define TASTRL(x) (strlen(x) + 1)
+#if WIN
+typedef unsigned char uchar_t;
+#endif /* WIN */
+#endif /* UNICODE */
+
+#endif /* ! CHAR_T_DEFINED */
+
+/*
+ * "Boolean" constants
+ */
+
+#ifndef TRUE
+#define TRUE 1
+#endif
+
+#ifndef FALSE
+#define FALSE 0
+#endif
+
+/*
+ * GoAhead Copyright.
+ */
+#define GOAHEAD_COPYRIGHT \
+ T("Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.")
+
+/*
+ * The following include has to be after the unicode defines. By putting it
+ * here, many modules in various parts of the tree are cleaner.
+ */
+#if LITTLEFOOT && INMEM
+ #include "lf/inmem.h"
+#endif /* LITTLEFOOT && INMEM */
+
+/*
+ * Type for unicode systems
+ */
+#if UNICODE
#define gmain wmain
+#define gasctime _wasctime
#define gsprintf swprintf
#define gprintf wprintf
#define gfprintf fwprintf
@@ -165,15 +327,23 @@ typedef unsigned short uchar_t;
#define gstrrchr wcsrchr
#define gstrtok wcstok
#define gstrnset wcsnset
+#define gstrrchr wcsrchr
#define gstrstr wcsstr
+#define gstrtol wcstol
#define gfopen _wfopen
#define gopen _wopen
+#define gclose close
#define gcreat _wcreat
#define gfgets fgetws
#define gfputs fputws
+#define gfscanf fwscanf
+#define ggets _getws
+#define glseek lseek
#define gunlink _wunlink
+#define gread read
#define grename _wrename
+#define gwrite write
#define gtmpnam _wtmpnam
#define gtempnam _wtempnam
#define gfindfirst _wfindfirst
@@ -182,24 +352,34 @@ typedef unsigned short uchar_t;
#define gfindclose _findclose
#define gstat _wstat
#define gaccess _waccess
+#define gchmod _wchmod
typedef struct _stat gstat_t;
#define gmkdir _wmkdir
#define gchdir _wchdir
#define grmdir _wrmdir
-#define gremove _wremove
#define ggetcwd _wgetcwd
#define gtolower towlower
#define gtoupper towupper
+#if CE
+#define gisspace isspace
+#define gisdigit isdigit
+#define gisxdigit isxdigit
+#define gisupper isupper
+#define gislower islower
+#define gisprint isprint
+#else
+#define gremove _wremove
#define gisspace iswspace
#define gisdigit iswdigit
#define gisxdigit iswxdigit
-#define gisalnum iswalnum
-#define gisalpha iswalpha
#define gisupper iswupper
#define gislower iswlower
+#endif /* if CE */
+#define gisalnum iswalnum
+#define gisalpha iswalpha
#define gatoi(s) wcstol(s, NULL, 10)
#define gctime _wctime
@@ -208,14 +388,57 @@ typedef struct _stat gstat_t;
#else /* ! UNICODE */
-#define T(s) s
-#define TSZ(x) (sizeof(x))
-#define TASTRL(x) (strlen(x) + 1)
-typedef char char_t;
-#if WIN
-typedef unsigned char uchar_t;
-#endif
+#ifndef gopen
+#if INMEM
+#define gclose imClose
+#define gclosedir imClosedir
+#define gchdir imChdir
+#define gchmod imChmod
+#define ggetcwd imGetcwd
+#define glseek imLseek
+#define gloadModule imLoadModule
+#define gmkdir imMkdir
+#define gopen imOpen
+#define gopendir imOpendir
+#define gread imRead
+#define greaddir imReaddir
+#define grename imRename
+#define grmdir imRmdir
+#define gstat imStat
+#define gunlink imUnlink
+#define gwrite imWrite
+#else
+#define gclose close
+#define gclosedir closedir
+#if VXWORKS
+#define gchdir vxchdir
+#define gmkdir vxmkdir
+#define grmdir vxrmdir
+#else
+#if LYNX || LINUX || SOLARIS
+#define gmkdir(s) mkdir(s,0755)
+#else
+#define gmkdir mkdir
+#endif /* LYNX || LINUX || SOLARIS */
+#define grmdir rmdir
+#define gchdir chdir
+#endif /* VXWORKS */
+#define gchmod chmod
+#define ggetcwd getcwd
+#define glseek lseek
+#define gloadModule loadModule
+#define gopen open
+#define gopendir opendir
+#define gread read
+#define greaddir readdir
+#define grename rename
+#define gstat stat
+#define gunlink unlink
+#define gwrite write
+#endif /* INMEM */
+#endif /* ! gopen */
+#define gasctime asctime
#define gsprintf sprintf
#define gprintf printf
#define gfprintf fprintf
@@ -229,36 +452,32 @@ typedef unsigned char uchar_t;
#define gstrcat strcat
#define gstrcmp strcmp
#define gstrncmp strncmp
-#define gstricmp stricmp
+#define gstricmp strcmpci
#define gstrchr strchr
#define gstrrchr strrchr
#define gstrtok strtok
#define gstrnset strnset
+#define gstrrchr strrchr
#define gstrstr strstr
+#define gstrtol strtol
#define gfopen fopen
-#define gopen open
#define gcreat creat
#define gfgets fgets
#define gfputs fputs
-#define gunlink unlink
-#define grename rename
+#define gfscanf fscanf
+#define ggets gets
#define gtmpnam tmpnam
#define gtempnam tempnam
#define gfindfirst _findfirst
#define gfinddata_t _finddata_t
#define gfindnext _findnext
#define gfindclose _findclose
-#define gstat stat
#define gaccess access
typedef struct stat gstat_t;
-#define gmkdir mkdir
-#define gchdir chdir
-#define grmdir rmdir
#define gremove remove
-#define ggetcwd getcwd
#define gtolower tolower
#define gtoupper toupper
@@ -274,16 +493,23 @@ typedef struct stat gstat_t;
#define gctime ctime
#define ggetenv getenv
#define gexecvp execvp
-#ifndef VXW486
+#ifndef VXWORKS
#define gmain main
-#endif
-#endif
+#endif /* ! VXWORKS */
+#if VXWORKS
+#define fcntl(a, b, c)
+#endif /* VXWORKS */
+#endif /* ! UNICODE */
/********************************** Defines ***********************************/
-#define FNAMESIZE 256 /* Max length of file names */
+#ifndef FNAMESIZE
+#define FNAMESIZE 254 /* Max length of file names */
+#endif /* FNAMESIZE */
#define E_MAX_ERROR 4096
+#define URL_MAX 4096
+
/*
* Error types
*/
@@ -291,79 +517,84 @@ typedef struct stat gstat_t;
#define E_LOG 0x2 /* Log error to log file */
#define E_USER 0x3 /* Error that must be displayed */
-#define E_L T(__FILE__), __LINE__
-#define E_ARGS_DEC char_t *file, int line
-#define E_ARGS file, line
+#define E_L T(__FILE__), __LINE__
+#define E_ARGS_DEC char_t *file, int line
+#define E_ARGS file, line
-#if ASSERT
- #define a_assert(C) if (C) ; else error(E_L, E_ASSERT, T("%s"), #C)
+#if ASSERT || ASSERT_CE
+ #define a_assert(C) if (C) ; else error(E_L, E_ASSERT, T("%s"), T(#C))
#else
#define a_assert(C) if (1) ; else
-#endif
-
-#define VALUE_VALID { {0}, integer, 1 }
-#define VALUE_INVALID { {0}, undefined, 0 }
-
-/*
- * Allocation flags
- */
-#define VALUE_ALLOCATE 0x1
-
-#define value_numeric(t) (t == integer)
-#define value_str(t) (t >= string || t <= bytes)
-#define value_ok(t) (t > undefined && t <= symbol)
+#endif /* ASSERT || ASSERT_CE */
+/******************************************************************************/
+/* VALUE */
+/******************************************************************************/
/*
* These values are not prefixed so as to aid code readability
*/
-#if !defined(UW) && !defined(__rtems__)
-#pragma pack(2)
-#endif
typedef enum {
undefined = 0,
- integer = 1,
- string = 2,
- bytes = 3,
- errmsg = 4
-} value_type_t;
+ byteint = 1,
+ shortint = 2,
+ integer = 3,
+ hex = 4,
+ percent = 5,
+ octal = 6,
+ big = 7,
+ flag = 8,
+ floating = 9,
+ string = 10,
+ bytes = 11,
+ symbol = 12,
+ errmsg = 13
+} vtype_t;
+
+#ifndef __NO_PACK
+#pragma pack(2)
+#endif /* _NO_PACK */
-/*
- * In UW, bit fields default to unsigned unless explicitly defined as signed.
- * Unfortunately, enum become ints, but not explicitly signed. Thus, if using
- * an enum type in a bit field, it becomes unsigned, but we need signed. So
- * for UW we declare value_type_t to be a signed int to make this all work.
- */
typedef struct {
union {
+ char flag;
+ char byteint;
+ short shortint;
+ char percent;
long integer;
+ long hex;
+ long octal;
+ long big[2];
+#if FLOATING_POINT_SUPPORT
+ double floating;
+#endif /* FLOATING_POINT_SUPPORT */
char_t *string;
- char_t *bytes;
+ char *bytes;
char_t *errmsg;
void *symbol;
} value;
-#if UW
- signed int type : 8;
-#else
- value_type_t type : 8;
-#endif
-
- unsigned int valid : 1;
- unsigned int user_def_1 : 1;
- unsigned int allocated : 1; /* String was balloced */
+ vtype_t type : 16;
+ unsigned int valid : 8;
+ unsigned int allocated : 8; /* String was balloced */
} value_t;
+#ifndef __NO_PACK
+#pragma pack()
+#endif /* __NO_PACK */
+
/*
- * Extract a string from the value depending whether inline or via pointer
+ * Allocation flags
*/
-#define value_strget(v) \
- (((v)->type == bytes) ? (v)->value.bytes : (v)->value.string)
+#define VALUE_ALLOCATE 0x1
-#if !defined(UW) && !defined(__rtems__)
-#pragma pack()
-#endif
+#define value_numeric(t) (t >= byteint && t <= big)
+#define value_str(t) (t >= string && t <= bytes)
+#define value_ok(t) (t > undefined && t <= symbol)
+
+#define VALUE_VALID { {0}, integer, 1 }
+#define VALUE_INVALID { {0}, undefined, 0 }
/******************************************************************************/
/*
@@ -417,16 +648,28 @@ typedef struct {
} ringq_t;
/*
- * Block allocation definitions
+ * Block allocation (balloc) definitions
*/
-#define B_L __FILE__, __LINE__
-#define B_ARGS_DEC char *file, int line
+#ifdef B_STATS
+#ifndef B_L
+#define B_L T(__FILE__), __LINE__
+#define B_ARGS_DEC char_t *file, int line
#define B_ARGS file, line
+#endif /* B_L */
+#endif /* B_STATS */
/*
* Block classes are: 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192,
* 16384, 32768, 65536
*/
+typedef struct {
+ union {
+ void *next; /* Pointer to next in q */
+ int size; /* Actual requested size */
+ } u;
+ int flags; /* Per block allocation flags */
+} bType;
+
#define B_SHIFT 4 /* Convert size to class */
#define B_ROUND ((1 << (B_SHIFT)) - 1)
#define B_MAX_CLASS 13 /* Maximum class number + 1 */
@@ -438,13 +681,12 @@ typedef struct {
#define B_MAX_BLOCKS (64 * 1024) /* Maximum allocated blocks */
/*
- * Flags. The integer value is used as an arbitrary value to fill the flags.
+ * Flags. The integrity value is used as an arbitrary value to fill the flags.
*/
-
-#define B_USE_MALLOC 0x1 /* Okay to use malloc if required */
-#define B_USER_BUF 0x2 /* User supplied buffer for mem */
#define B_INTEGRITY 0x8124000 /* Integrity value */
#define B_INTEGRITY_MASK 0xFFFF000 /* Integrity mask */
+#define B_USE_MALLOC 0x1 /* Okay to use malloc if required */
+#define B_USER_BUF 0x2 /* User supplied buffer for mem */
/*
* The symbol table record for each symbol entry
@@ -460,14 +702,67 @@ typedef struct sym_t {
typedef int sym_fd_t; /* Returned by symOpen */
/*
+ * Script engines
+ */
+#define EMF_SCRIPT_JSCRIPT 0 /* javascript */
+#define EMF_SCRIPT_TCL 1 /* tcl */
+#define EMF_SCRIPT_EJSCRIPT 2 /* Ejscript */
+#define EMF_SCRIPT_MAX 3
+
+#define MAXINT INT_MAX
+#define BITSPERBYTE 8
+#define BITS(type) (BITSPERBYTE * (int) sizeof(type))
+#define STRSPACE T("\t \n\r\t")
+
+#ifndef max
+#define max(a,b) (((a) > (b)) ? (a) : (b))
+#endif /* max */
+
+#ifndef min
+#define min(a,b) (((a) < (b)) ? (a) : (b))
+#endif /* min */
+
+/******************************************************************************/
+/* CRON */
+/******************************************************************************/
+
+typedef struct {
+ char_t *minute;
+ char_t *hour;
+ char_t *day;
+ char_t *month;
+ char_t *dayofweek;
+} cron_t;
+
+extern long cronUntil(cron_t *cp, int period, time_t testTime);
+extern int cronAlloc(cron_t *cp, char_t *str);
+extern int cronFree(cron_t *cp);
+
+/******************************************************************************/
+/* SOCKET */
+/******************************************************************************/
+/*
* Socket flags
*/
+
+#if (WIN || CE) && WEBS
+#define EWOULDBLOCK WSAEWOULDBLOCK
+#define ENETDOWN WSAENETDOWN
+#define ECONNRESET WSAECONNRESET
+#endif /* (WIN || CE) && WEBS) */
+
#define SOCKET_EOF 0x1 /* Seen end of file */
#define SOCKET_CONNECTING 0x2 /* Connect in progress */
#define SOCKET_BROADCAST 0x4 /* Broadcast mode */
#define SOCKET_PENDING 0x8 /* Message pending on this socket */
#define SOCKET_FLUSHING 0x10 /* Background flushing */
-#define SOCKET_LISTENING 0x20 /* Server socket listening */
+#define SOCKET_DATAGRAM 0x20 /* Use datagrams */
+#define SOCKET_ASYNC 0x40 /* Use async connect */
+#define SOCKET_BLOCK 0x80 /* Use blocking I/O */
+#define SOCKET_LISTENING 0x100 /* Socket is server listener */
+#define SOCKET_CLOSING 0x200 /* Socket is closing */
+
+#define SOCKET_PORT_MAX 0xffff /* Max Port size */
/*
* Socket error values
@@ -485,181 +780,261 @@ typedef int sym_fd_t; /* Returned by symOpen */
#define SOCKET_READABLE 0x2 /* Make socket readable */
#define SOCKET_WRITABLE 0x4 /* Make socket writable */
#define SOCKET_EXCEPTION 0x8 /* Interested in exceptions */
+#define EMF_SOCKET_MESSAGE (WM_USER+13)
-#define SOCKET_BUFSIZ 512 /* Underlying buffer size */
+#if LITTLEFOOT
+#define SOCKET_BUFSIZ 510 /* Underlying buffer size */
+#else
+#define SOCKET_BUFSIZ 1024 /* Underlying buffer size */
+#endif /* LITTLEFOOT */
typedef void (*socketHandler_t)(int sid, int mask, int data);
-typedef int (*socketAccept_t)(int sid, char *ipaddr, int port);
+typedef int (*socketAccept_t)(int sid, char *ipaddr, int port,
+ int listenSid);
+typedef struct {
+ char host[64]; /* Host name */
+ ringq_t inBuf; /* Input ring queue */
+ ringq_t outBuf; /* Output ring queue */
+ ringq_t lineBuf; /* Line ring queue */
+ socketAccept_t accept; /* Accept handler */
+ socketHandler_t handler; /* User I/O handler */
+ int handler_data; /* User handler data */
+ int handlerMask; /* Handler events of interest */
+ int sid; /* Index into socket[] */
+ int port; /* Port to listen on */
+ int flags; /* Current state flags */
+ int sock; /* Actual socket handle */
+ int fileHandle; /* ID of the file handler */
+ int interestEvents; /* Mask of events to watch for */
+ int currentEvents; /* Mask of ready events (FD_xx) */
+ int selectEvents; /* Events being selected */
+ int saveMask; /* saved Mask for socketFlush */
+ int error; /* Last error */
+} socket_t;
+/********************************* Prototypes *********************************/
/*
- * Script engines
+ * Balloc module
+ *
*/
-#define EMF_SCRIPT_JSCRIPT 0 /* javascript */
-#define EMF_SCRIPT_TCL 1 /* tcl */
-#define EMF_SCRIPT_EJSCRIPT 2 /* Ejscript */
-#define EMF_SCRIPT_MAX 3
-#define MAXINT INT_MAX
-#define BITSPERBYTE 8
-#define BITS(type) (BITSPERBYTE * (int) sizeof(type))
-
-#ifndef max
-#define max(a,b) (((a) > (b)) ? (a) : (b))
-#endif
-
-#ifndef min
-#define min(a,b) (((a) < (b)) ? (a) : (b))
-#endif
+extern void bclose();
+extern int bopen(void *buf, int bufsize, int flags);
-/******************************* Per O/S Defines ******************************/
+/*
+ * Define NO_BALLOC to turn off our balloc module altogether
+ * #define NO_BALLOC 1
+ */
-#if VXW486 || LINUX || __rtems__ || LYNX
-#ifndef O_BINARY
-#define O_BINARY 0
-#endif
-#define SOCKET_ERROR -1
-#endif
+#if NO_BALLOC
+#define balloc(B_ARGS, num) malloc(num)
+#define bfree(B_ARGS, p) free(p)
+#define bfreeSafe(B_ARGS, p) \
+ if (p) { free(p); } else
+#define brealloc(B_ARGS, p, num) realloc(p, num)
+extern char_t *bstrdupNoBalloc(char_t *s);
+extern char *bstrdupANoBalloc(char *s);
+#define bstrdup(B_ARGS, s) bstrdupNoBalloc(s)
+#define bstrdupA(B_ARGS, s) bstrdupANoBalloc(s)
+#define gstrdup(B_ARGS, s) bstrdupNoBalloc(s)
-#if WIN
-#undef R_OK
-#define R_OK 4
-#undef W_OK
-#define W_OK 2
-#undef X_OK
-#define X_OK 1
-#undef F_OK
-#define F_OK 0
-#endif
+#else /* BALLOC */
-/********************************* Prototypes *********************************/
+#ifndef B_STATS
+#define balloc(B_ARGS, num) balloc(num)
+#define bfree(B_ARGS, p) bfree(p)
+#define bfreeSafe(B_ARGS, p) bfreeSafe(p)
+#define brealloc(B_ARGS, p, size) brealloc(p, size)
+#define bstrdup(B_ARGS, p) bstrdup(p)
-extern void bclose();
-extern int bopen(void *buf, int bufsize, int flags);
-#if NO_BALLOC
-#undef B_L
-#define B_L x
-#define balloc(x, num) malloc(num)
-#define bfree(x, p) free(p)
-#define bfreeSafe(x, p) \
- if (p) { bfree(x, p); } else
-#define brealloc(x, p, num) realloc(p, num)
-extern char *bstrdupANoBalloc(char *s);
-#define bstrdupA(x, s) bstrdupANoBalloc(s)
#if UNICODE
-extern char_t *bstrdupNoBalloc(char_t *s);
-#define bstrdup(x, s) bstrdupNoBalloc(s)
-#define gstrdup(x, s) bstrdupNoBalloc(s)
-#else /* Not UNICODE */
-#define bstrdup(x, s) bstrdupANoBalloc(s)
-#define gstrdup(x, s) bstrdupANoBalloc(s)
+#define bstrdupA(B_ARGS, p) bstrdupA(p)
+#else /* UNICODE */
+#define bstrdupA bstrdup
#endif /* UNICODE */
-#else /* BALLOC */
+#endif /* B_STATS */
+
+#define gstrdup bstrdup
extern void *balloc(B_ARGS_DEC, int size);
-extern void bfree(B_ARGS_DEC, void *mp);
-extern void *brealloc(B_ARGS_DEC, void *buf, int newsize);
-extern void bstats(int handle, void (*writefn)(int fd, char_t *fmt, ...));
-extern char_t *bstrdup(B_ARGS_DEC, char_t *s);
-extern void bfreeSafe(B_ARGS_DEC, void* mp);
-#define gstrdup(B_ARGS, s) bstrdup(B_ARGS, s)
+extern void bfree(B_ARGS_DEC, void *mp);
+extern void bfreeSafe(B_ARGS_DEC, void *mp);
+extern void *brealloc(B_ARGS_DEC, void *buf, int newsize);
+extern char_t *bstrdup(B_ARGS_DEC, char_t *s);
+
#if UNICODE
extern char *bstrdupA(B_ARGS_DEC, char *s);
-#else
+#else /* UNICODE */
#define bstrdupA bstrdup
#endif /* UNICODE */
#endif /* BALLOC */
+extern void bstats(int handle, void (*writefn)(int handle, char_t *fmt, ...));
+
+/*
+ * Flags. The integrity value is used as an arbitrary value to fill the flags.
+ */
+#define B_USE_MALLOC 0x1 /* Okay to use malloc if required */
+#define B_USER_BUF 0x2 /* User supplied buffer for mem */
+
+
#if !LINUX && !__rtems__
-extern char_t* basename(char_t* name);
-#endif
+extern char_t *basename(char_t *name);
+#endif /* !LINUX */
-extern void *emfCreateTimer(int delay, void (*routine)(long arg), long arg);
-extern void emfDeleteTimer(void *id);
-extern int emfInstGet();
-extern void emfInstSet(int inst);
-extern void error(E_ARGS_DEC, int flags, char_t *fmt, ...);
+#if UEMF && WEBS
+/*
+ * The open source webserver uses a different callback/timer mechanism
+ * than other emf derivative products such as FieldUpgrader agents
+ * so redefine those API for webserver so that they can coexist in the
+ * same address space as the others.
+ */
+#define emfSchedCallback websSchedCallBack
+#define emfUnschedCallback websUnschedCallBack
+#define emfReschedCallback websReschedCallBack
+#endif /* UEMF && WEBS */
+
+typedef void (emfSchedProc)(void *data, int id);
+extern int emfSchedCallback(int delay, emfSchedProc *proc, void *arg);
+extern void emfUnschedCallback(int id);
+extern void emfReschedCallback(int id, int delay);
+extern void emfSchedProcess();
+extern int emfInstGet();
+extern void emfInstSet(int inst);
+extern void error(E_ARGS_DEC, int flags, char_t *fmt, ...);
+extern void (*errorSetHandler(void (*function)(int etype, char_t *msg))) \
+ (int etype, char_t *msg);
+
+#if B_STATS
+#define hAlloc(x) HALLOC(B_L, x)
+#define hAllocEntry(x, y, z) HALLOCENTRY(B_L, x, y, z)
+extern int HALLOC(B_ARGS_DEC, void ***map);
+extern int HALLOCENTRY(B_ARGS_DEC, void ***list, int *max, int size);
+#else
+extern int hAlloc(void ***map);
+extern int hAllocEntry(void ***list, int *max, int size);
+#endif /* B_STATS */
-extern int hAlloc(void*** map);
-extern int hFree(void*** map, int handle);
-extern int hAllocEntry(void ***list, int *max, int size);
+extern int hFree(void ***map, int handle);
-extern int ringqOpen(ringq_t *rq, int increment, int maxsize);
-extern void ringqClose(ringq_t *rq);
-extern int ringqLen(ringq_t *rq);
+extern int ringqOpen(ringq_t *rq, int increment, int maxsize);
+extern void ringqClose(ringq_t *rq);
+extern int ringqLen(ringq_t *rq);
-extern int ringqPutc(ringq_t *rq, char_t c);
-extern int ringqInsertc(ringq_t *rq, char_t c);
-extern int ringqPutstr(ringq_t *rq, char_t *str);
-extern int ringqGetc(ringq_t *rq);
+extern int ringqPutc(ringq_t *rq, char_t c);
+extern int ringqInsertc(ringq_t *rq, char_t c);
+extern int ringqPutStr(ringq_t *rq, char_t *str);
+extern int ringqGetc(ringq_t *rq);
-extern int gvsnprintf(char_t **s, int n, char_t *fmt, va_list arg);
-extern int gsnprintf(char_t **s, int n, char_t *fmt, ...);
+extern int fmtValloc(char_t **s, int n, char_t *fmt, va_list arg);
+extern int fmtAlloc(char_t **s, int n, char_t *fmt, ...);
+extern int fmtStatic(char_t *s, int n, char_t *fmt, ...);
#if UNICODE
-extern int ringqPutcA(ringq_t* rq, char c);
-extern int ringqInsertcA(ringq_t* rq, char c);
-extern int ringqPutstrA(ringq_t* rq, char* str);
-extern int ringqGetcA(ringq_t* rq);
+extern int ringqPutcA(ringq_t *rq, char c);
+extern int ringqInsertcA(ringq_t *rq, char c);
+extern int ringqPutStrA(ringq_t *rq, char *str);
+extern int ringqGetcA(ringq_t *rq);
#else
#define ringqPutcA ringqPutc
#define ringqInsertcA ringqInsertc
-#define ringqPutstrA ringqPutstr
+#define ringqPutStrA ringqPutStr
#define ringqGetcA ringqGetc
-#endif
-
-extern int ringqPutBlk(ringq_t *rq, unsigned char *buf, int len);
-extern int ringqPutBlkMax(ringq_t *rq);
-extern void ringqPutBlkAdj(ringq_t *rq, int size);
-extern int ringqGetBlk(ringq_t *rq, unsigned char *buf, int len);
-extern int ringqGetBlkMax(ringq_t *rq);
-extern void ringqGetBlkAdj(ringq_t *rq, int size);
-extern void ringqFlush(ringq_t *rq);
-
-extern int scriptSetVar(int engine, char_t *var, char_t *value);
-extern int scriptEval(int engine, char_t *cmd, char_t **rslt, int chan);
+#endif /* UNICODE */
-extern void socketClose();
-extern void socketCloseConnection(int sid);
-extern void socketCreateHandler(int sid, int mask, socketHandler_t
+extern int ringqPutBlk(ringq_t *rq, unsigned char *buf, int len);
+extern int ringqPutBlkMax(ringq_t *rq);
+extern void ringqPutBlkAdj(ringq_t *rq, int size);
+extern int ringqGetBlk(ringq_t *rq, unsigned char *buf, int len);
+extern int ringqGetBlkMax(ringq_t *rq);
+extern void ringqGetBlkAdj(ringq_t *rq, int size);
+extern void ringqFlush(ringq_t *rq);
+extern void ringqAddNull(ringq_t *rq);
+
+extern int scriptSetVar(int engine, char_t *var, char_t *value);
+extern int scriptEval(int engine, char_t *cmd, char_t **rslt, int chan);
+
+extern void socketClose();
+extern void socketCloseConnection(int sid);
+extern void socketCreateHandler(int sid, int mask, socketHandler_t
handler, int arg);
-extern void socketDeleteHandler(int sid);
-extern int socketEof(int sid);
-extern int socketFlush(int sid, int block);
-extern int socketGets(int sid, char_t** buf);
-extern int socketInputBuffered(int sid);
-extern int socketOpen();
-extern int socketOpenConnection(char *host, int port,
+extern void socketDeleteHandler(int sid);
+extern int socketEof(int sid);
+extern int socketCanWrite(int sid);
+extern void socketSetBufferSize(int sid, int in, int line, int out);
+extern int socketFlush(int sid);
+extern int socketGets(int sid, char_t **buf);
+extern int socketGetPort(int sid);
+extern int socketInputBuffered(int sid);
+extern int socketOpen();
+extern int socketOpenConnection(char *host, int port,
socketAccept_t accept, int flags);
-extern void socketProcess();
-extern int socketRead(int sid, char *buf, int len);
-extern int socketReady();
-extern int socketWrite(int sid, char *buf, int len);
-extern int socketWriteString(int sid, char_t *buf);
-extern int socketSelect();
+extern void socketProcess(int hid);
+extern int socketRead(int sid, char *buf, int len);
+extern int socketReady(int hid);
+extern int socketWrite(int sid, char *buf, int len);
+extern int socketWriteString(int sid, char_t *buf);
+extern int socketSelect(int hid, int timeout);
+extern int socketGetHandle(int sid);
+extern int socketSetBlock(int sid, int flags);
+extern int socketGetBlock(int sid);
+extern int socketAlloc(char *host, int port, socketAccept_t accept,
+ int flags);
+extern void socketFree(int sid);
+extern int socketGetError();
+extern socket_t *socketPtr(int sid);
+extern int socketWaitForEvent(socket_t *sp, int events, int *errCode);
+extern void socketRegisterInterest(socket_t *sp, int handlerMask);
+extern int socketGetInput(int sid, char *buf, int toRead, int *errCode);
extern char_t *strlower(char_t *string);
extern char_t *strupper(char_t *string);
extern char_t *stritoa(int n, char_t *string, int width);
-extern sym_fd_t symOpen(int hash_size);
-extern void symClose(sym_fd_t sd, void (*cleanup)(sym_t *sp));
+extern sym_fd_t symOpen(int hash_size);
+extern void symClose(sym_fd_t sd);
extern sym_t *symLookup(sym_fd_t sd, char_t *name);
extern sym_t *symEnter(sym_fd_t sd, char_t *name, value_t v, int arg);
-extern int symDelete(sym_fd_t sd, char_t *name);
-extern void symWalk(sym_fd_t sd, void (*fn)(sym_t *symp));
-
-extern void goahead_trace(int lev, char_t *fmt, ...);
+extern int symDelete(sym_fd_t sd, char_t *name);
+extern void symWalk(sym_fd_t sd, void (*fn)(sym_t *symp));
+extern sym_t *symFirst(sym_fd_t sd);
+extern sym_t *symNext(sym_fd_t sd);
+extern int symSubOpen();
+extern void symSubClose();
+
+extern void trace(int lev, char_t *fmt, ...);
+extern void traceRaw(char_t *buf);
+extern void (*traceSetHandler(void (*function)(int level, char_t *buf)))
+ (int level, char_t *buf);
-extern value_t valueInteger(long value);
-extern value_t valueString(char_t *value, int flags);
-extern value_t valueErrmsg(char_t *value);
-extern void valueFree(value_t *v);
+extern value_t valueInteger(long value);
+extern value_t valueString(char_t *value, int flags);
+extern value_t valueErrmsg(char_t *value);
+extern void valueFree(value_t *v);
+extern int vxchdir(char *dirname);
+
+extern unsigned int hextoi(char_t *hexstring);
+extern unsigned int gstrtoi(char_t *s);
+extern time_t timeMsec();
extern char_t *ascToUni(char_t *ubuf, char *str, int nBytes);
extern char *uniToAsc(char *buf, char_t *ustr, int nBytes);
-extern char_t *ballocAscToUni(char * cp);
-extern char *ballocUniToAsc(char_t * unip, int ulen);
+extern char_t *ballocAscToUni(char *cp, int alen);
+extern char *ballocUniToAsc(char_t *unip, int ulen);
+
+extern char_t *basicGetHost();
+extern char_t *basicGetAddress();
+extern char_t *basicGetProduct();
+extern void basicSetHost(char_t *host);
+extern void basicSetAddress(char_t *addr);
+
+extern int harnessOpen(char_t **argv);
+extern void harnessClose(int status);
+extern void harnessTesting(char_t *msg, ...);
+extern void harnessPassed();
+extern void harnessFailed(int line);
+extern int harnessLevel();
#endif /* _h_UEMF */