source: rtems/cpukit/httpd/uemf.h @ f22ebf0

4.104.114.84.95
Last change on this file since f22ebf0 was a6b4c0df, checked in by Joel Sherrill <joel.sherrill@…>, on 09/01/00 at 10:57:21

2000-08-30 Joel Sherrill <joel@…>

  • Merged version 2.1 of GoAhead? webserver. This update was submitted by Antti P Miettinen <antti.p.miettinen@…>.
  • 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.
  • Property mode set to 100644
File size: 27.8 KB
Line 
1/*
2 * uemf.h -- GoAhead Micro Embedded Management Framework Header
3 *
4 * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
5 *
6 * See the file "license.txt" for usage and redistribution license requirements
7 */
8
9#ifndef _h_UEMF
10#define _h_UEMF 1
11
12/******************************** Description *********************************/
13
14/*
15 *      GoAhead Web Server header. This defines the Web public APIs
16 */
17
18/******************************* Per O/S Includes *****************************/
19
20#if WIN
21        #include        <direct.h>
22        #include        <io.h>
23        #include        <sys/stat.h>
24        #include        <limits.h>
25        #include        <tchar.h>
26        #include        <windows.h>
27        #include        <winnls.h>
28        #include        <time.h>
29        #include        <sys/types.h>
30        #include        <stdio.h>
31        #include        <stdlib.h>
32        #include        <fcntl.h>
33        #include        <errno.h>
34#endif /* WIN */
35
36#if CE
37        #include        <limits.h>
38        #include        <tchar.h>
39        #include        <windows.h>
40        #include        <winnls.h>
41        #include        "CE/wincompat.h"
42        #include        <winsock.h>
43#endif /* CE */
44
45#if NW
46        #include        <stdio.h>
47#endif /* NW */
48
49#if SCOV5
50        #include        <sys/types.h>
51        #include        <stdio.h>
52        #include        "sys/socket.h"
53        #include        "sys/select.h"
54        #include        "netinet/in.h"
55        #include        "arpa/inet.h"
56        #include        "netdb.h"
57#endif /* SCOV5 */
58
59#if UNIX
60        #include        <stdio.h>
61#endif /* UNIX */
62
63#if LINUX || __rtems__
64        #include        <sys/types.h>
65        #include        <sys/stat.h>
66        #include        <sys/param.h>
67        #include        <limits.h>
68        #include        <stdio.h>
69        #include        <stdlib.h>
70        #include        <unistd.h>
71        #include        <sys/socket.h>
72        #include        <sys/select.h>
73        #include        <netinet/in.h>
74        #include        <arpa/inet.h>
75        #include        <netdb.h>
76        #include        <time.h>
77        #include        <fcntl.h>
78        #include        <errno.h>
79#endif /* LINUX */
80
81#if LYNX
82        #include        <limits.h>
83        #include        <stdarg.h>
84        #include        <stdio.h>
85        #include        <stdlib.h>
86        #include        <unistd.h>
87        #include        <socket.h>
88        #include        <netinet/in.h>
89        #include        <arpa/inet.h>
90        #include        <netdb.h>
91        #include        <time.h>
92        #include        <fcntl.h>
93        #include        <errno.h>
94#endif /* LYNX */
95
96#if UW
97        #include        <stdio.h>
98#endif /* UW */
99
100#if VXWORKS
101        #include        <vxWorks.h>
102        #include        <sockLib.h>
103        #include        <selectLib.h>
104        #include        <inetLib.h>
105        #include        <ioLib.h>
106        #include        <stdio.h>
107        #include        <stat.h>
108        #include        <time.h>
109        #include        <usrLib.h>
110        #include        <fcntl.h>
111        #include        <errno.h>
112#endif /* VXWORKS */
113
114#if SOLARIS
115        #include        <sys/types.h>
116        #include        <limits.h>
117        #include        <stdio.h>
118        #include        <stdlib.h>
119        #include        <unistd.h>
120        #include        <socket.h>
121        #include        <sys/select.h>
122        #include        <netinet/in.h>
123        #include        <arpa/inet.h>
124        #include        <netdb.h>
125        #include        <time.h>
126        #include        <fcntl.h>
127        #include        <errno.h>
128#endif /* SOLARIS */
129
130#if QNX4
131        #include        <sys/types.h>
132        #include        <stdio.h>
133        #include        <sys/socket.h>
134        #include        <sys/select.h>
135        #include        <netinet/in.h>
136        #include        <arpa/inet.h>
137        #include        <netdb.h>
138    #include    <stdlib.h>
139    #include    <unistd.h>
140    #include    <sys/uio.h>
141    #include    <sys/wait.h>
142#endif /* QNX4 */
143
144#if ECOS
145        #include        <limits.h>
146        #include        <cyg/infra/cyg_type.h>
147        #include        <cyg/kernel/kapi.h>
148        #include        <time.h>
149        #include        <network.h>
150        #include        <errno.h>
151#endif /* ECOS */
152
153/********************************** Includes **********************************/
154
155#include        <ctype.h>
156#include        <stdarg.h>
157#include        <string.h>
158
159#if ! WEBS
160#include        "messages.h"
161#endif /* ! WEBS */
162
163/******************************* Per O/S Defines *****************************/
164
165#if UW
166        #define         __NO_PACK               1
167#endif /* UW */
168
169#if SCOV5 || VXWORKS || LINUX || LYNX || __rtems__
170#ifndef O_BINARY
171#define O_BINARY                0
172#endif /* O_BINARY */
173#define SOCKET_ERROR    -1
174#endif /* SCOV5 || VXWORKS || LINUX || LYNX */
175
176#if WIN || CE
177/*
178 *      __NO_FCNTL means can't access fcntl function.  Fcntl.h is still available.
179 */
180#define         __NO_FCNTL              1
181
182#undef R_OK
183#define R_OK    4
184#undef W_OK
185#define W_OK    2
186#undef X_OK
187#define X_OK    1
188#undef F_OK
189#define F_OK    0
190#endif /* WIN || CE */
191
192#if LINUX && !__rtems__ && ! _STRUCT_TIMEVAL
193struct timeval
194{
195        time_t  tv_sec;         /* Seconds.  */
196        time_t  tv_usec;        /* Microseconds.  */
197};
198#define _STRUCT_TIMEVAL 1
199#endif /* LINUX && ! _STRUCT_TIMEVAL */
200
201#if ECOS
202        #define         O_RDONLY                1
203        #define         O_BINARY                2
204
205        #define         __NO_PACK               1
206        #define         __NO_EJ_FILE    1
207        #define         __NO_CGI_BIN    1
208        #define         __NO_FCNTL              1
209
210/*
211 *      #define LIBKERN_INLINE to avoid kernel inline functions
212 */
213        #define         LIBKERN_INLINE
214
215#endif /* ECOS */
216
217#if QNX4
218    typedef long        fd_mask;
219    #define NFDBITS (sizeof (fd_mask) * NBBY)   /* bits per mask */
220#endif /* QNX4 */
221
222/********************************** Unicode ***********************************/
223/*
224 *      Constants and limits. Also FNAMESIZE and PATHSIZE are currently defined
225 *      in param.h to be 128 and 512
226 */
227#define TRACE_MAX                       (4096 - 48)
228#define VALUE_MAX_STRING        (4096 - 48)
229#define SYM_MAX                         (512)
230#define XML_MAX                         4096                    /* Maximum size for tags/tokens */
231#define BUF_MAX                         4096                    /* General sanity check for bufs */
232
233#if LITTLEFOOT || WEBS
234#define LF_BUF_MAX              (510)
235#define LF_PATHSIZE             LF_BUF_MAX
236#else
237#define LF_BUF_MAX              BUF_MAX
238#define LF_PATHSIZE             PATHSIZE
239#define UPPATHSIZE              PATHSIZE
240#endif /* LITTLEFOOT || WEBS */
241
242#ifndef CHAR_T_DEFINED
243#define CHAR_T_DEFINED 1
244#if UNICODE
245/*
246 *      To convert strings to UNICODE. We have a level of indirection so things
247 *      like T(__FILE__) will expand properly.
248 */
249#define T(x)                            __TXT(x)
250#define __TXT(s)                        L ## s
251typedef unsigned short          char_t;
252typedef unsigned short          uchar_t;
253
254/*
255 *      Text size of buffer macro. A buffer bytes will hold (size / char size)
256 *      characters.
257 */
258#define TSZ(x)                          (sizeof(x) / sizeof(char_t))
259
260/*
261 *      How many ASCII bytes are required to represent this UNICODE string?
262 */
263#define TASTRL(x)                       ((wcslen(x) + 1) * sizeof(char_t))
264
265#else
266#define T(s)                            s
267typedef char                            char_t;
268#define TSZ(x)                          (sizeof(x))
269#define TASTRL(x)                       (strlen(x) + 1)
270#if WIN
271typedef unsigned char           uchar_t;
272#endif /* WIN */
273
274#endif /* UNICODE */
275
276#endif /* ! CHAR_T_DEFINED */
277
278/*
279 *      "Boolean" constants
280 */
281
282#ifndef TRUE
283#define TRUE 1
284#endif
285
286#ifndef FALSE
287#define FALSE 0
288#endif
289
290/*
291 *      GoAhead Copyright.
292 */
293#define GOAHEAD_COPYRIGHT \
294        T("Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.")
295
296/*
297 *      The following include has to be after the unicode defines.  By putting it
298 *      here, many modules in various parts of the tree are cleaner.
299 */
300#if LITTLEFOOT && INMEM
301        #include        "lf/inmem.h"
302#endif /* LITTLEFOOT && INMEM */
303
304/*
305 *      Type for unicode systems
306 */
307#if UNICODE
308
309#define gmain           wmain
310
311#define gasctime        _wasctime
312#define gsprintf        swprintf
313#define gprintf         wprintf
314#define gfprintf        fwprintf
315#define gsscanf         swscanf
316#define gvsprintf       vswprintf
317
318#define gstrcpy         wcscpy
319#define gstrncpy        wcsncpy
320#define gstrncat        wcsncat
321#define gstrlen         wcslen
322#define gstrcat         wcscat
323#define gstrcmp         wcscmp
324#define gstrncmp        wcsncmp
325#define gstricmp        wcsicmp
326#define gstrchr         wcschr
327#define gstrrchr        wcsrchr
328#define gstrtok         wcstok
329#define gstrnset        wcsnset
330#define gstrrchr        wcsrchr
331#define gstrstr         wcsstr
332#define gstrtol         wcstol
333
334#define gfopen          _wfopen
335#define gopen           _wopen
336#define gclose          close
337#define gcreat          _wcreat
338#define gfgets          fgetws
339#define gfputs          fputws
340#define gfscanf         fwscanf
341#define ggets           _getws
342#define glseek          lseek
343#define gunlink         _wunlink
344#define gread           read
345#define grename         _wrename
346#define gwrite          write
347#define gtmpnam         _wtmpnam
348#define gtempnam        _wtempnam
349#define gfindfirst      _wfindfirst
350#define gfinddata_t     _wfinddata_t
351#define gfindnext       _wfindnext
352#define gfindclose      _findclose
353#define gstat           _wstat
354#define gaccess         _waccess
355#define gchmod          _wchmod
356
357typedef struct _stat gstat_t;
358
359#define gmkdir          _wmkdir
360#define gchdir          _wchdir
361#define grmdir          _wrmdir
362#define ggetcwd         _wgetcwd
363
364#define gtolower        towlower
365#define gtoupper        towupper
366#if CE
367#define gisspace        isspace
368#define gisdigit        isdigit
369#define gisxdigit       isxdigit
370#define gisupper        isupper
371#define gislower        islower
372#define gisprint        isprint
373#else
374#define gremove         _wremove
375#define gisspace        iswspace
376#define gisdigit        iswdigit
377#define gisxdigit       iswxdigit
378#define gisupper        iswupper
379#define gislower        iswlower
380#endif  /* if CE */
381#define gisalnum        iswalnum
382#define gisalpha        iswalpha
383#define gatoi(s)        wcstol(s, NULL, 10)
384
385#define gctime          _wctime
386#define ggetenv         _wgetenv
387#define gexecvp         _wexecvp
388
389#else /* ! UNICODE */
390
391#ifndef gopen
392#if INMEM
393#define gclose          imClose
394#define gclosedir       imClosedir
395#define gchdir          imChdir
396#define gchmod          imChmod
397#define ggetcwd         imGetcwd
398#define glseek          imLseek
399#define gloadModule     imLoadModule
400#define gmkdir          imMkdir
401#define gopen           imOpen
402#define gopendir        imOpendir
403#define gread           imRead
404#define greaddir        imReaddir
405#define grename         imRename
406#define grmdir          imRmdir
407#define gstat           imStat
408#define gunlink         imUnlink
409#define gwrite          imWrite
410#else
411#define gclose          close
412#define gclosedir       closedir
413#if VXWORKS
414#define gchdir          vxchdir
415#define gmkdir          vxmkdir
416#define grmdir          vxrmdir
417#else
418#if LYNX || LINUX || SOLARIS
419#define gmkdir(s)       mkdir(s,0755)
420#else
421#define gmkdir          mkdir
422#endif /* LYNX || LINUX || SOLARIS */
423#define grmdir          rmdir
424#define gchdir          chdir
425#endif /* VXWORKS */
426#define gchmod          chmod
427#define ggetcwd         getcwd
428#define glseek          lseek
429#define gloadModule     loadModule
430#define gopen           open
431#define gopendir        opendir
432#define gread           read
433#define greaddir        readdir
434#define grename         rename
435#define gstat           stat
436#define gunlink         unlink
437#define gwrite          write
438#endif /* INMEM */
439#endif /* ! gopen */
440
441#define gasctime        asctime
442#define gsprintf        sprintf
443#define gprintf         printf
444#define gfprintf        fprintf
445#define gsscanf         sscanf
446#define gvsprintf       vsprintf
447
448#define gstrcpy         strcpy
449#define gstrncpy        strncpy
450#define gstrncat        strncat
451#define gstrlen         strlen
452#define gstrcat         strcat
453#define gstrcmp         strcmp
454#define gstrncmp        strncmp
455#define gstricmp        strcmpci
456#define gstrchr         strchr
457#define gstrrchr        strrchr
458#define gstrtok         strtok
459#define gstrnset        strnset
460#define gstrrchr        strrchr
461#define gstrstr         strstr
462#define gstrtol         strtol
463
464#define gfopen          fopen
465#define gcreat          creat
466#define gfgets          fgets
467#define gfputs          fputs
468#define gfscanf         fscanf
469#define ggets           gets
470#define gtmpnam         tmpnam
471#define gtempnam        tempnam
472#define gfindfirst      _findfirst
473#define gfinddata_t     _finddata_t
474#define gfindnext       _findnext
475#define gfindclose      _findclose
476#define gaccess         access
477
478typedef struct stat gstat_t;
479
480#define gremove         remove
481
482#define gtolower        tolower
483#define gtoupper        toupper
484#define gisspace        isspace
485#define gisdigit        isdigit
486#define gisxdigit       isxdigit
487#define gisalnum        isalnum
488#define gisalpha        isalpha
489#define gisupper        isupper
490#define gislower        islower
491#define gatoi           atoi
492
493#define gctime          ctime
494#define ggetenv         getenv
495#define gexecvp         execvp
496#ifndef VXWORKS
497#define gmain           main
498#endif /* ! VXWORKS */
499#if VXWORKS
500#define fcntl(a, b, c)
501#endif /* VXWORKS */
502#endif /* ! UNICODE */
503
504/********************************** Defines ***********************************/
505
506#ifndef FNAMESIZE
507#define FNAMESIZE                       254                     /* Max length of file names */
508#endif /* FNAMESIZE */
509
510#define E_MAX_ERROR                     4096
511#define URL_MAX                         4096
512
513/*
514 * Error types
515 */
516#define E_ASSERT                        0x1                     /* Assertion error */
517#define E_LOG                           0x2                     /* Log error to log file */
518#define E_USER                          0x3                     /* Error that must be displayed */
519
520#define E_L                                     T(__FILE__), __LINE__
521#define E_ARGS_DEC                      char_t *file, int line
522#define E_ARGS                          file, line
523
524#if ASSERT || ASSERT_CE
525        #define a_assert(C)             if (C) ; else error(E_L, E_ASSERT, T("%s"), T(#C))
526#else
527        #define a_assert(C)             if (1) ; else
528#endif /* ASSERT || ASSERT_CE */
529
530/******************************************************************************/
531/*                                 VALUE                                      */
532/******************************************************************************/
533/*
534 *      These values are not prefixed so as to aid code readability
535 */
536
537typedef enum {
538        undefined       = 0,
539        byteint         = 1,
540        shortint        = 2,
541        integer         = 3,
542        hex                     = 4,
543        percent         = 5,
544        octal           = 6,
545        big                     = 7,
546        flag            = 8,
547        floating        = 9,
548        string          = 10,
549        bytes           = 11,
550        symbol          = 12,
551        errmsg          = 13
552} vtype_t;
553
554#ifndef __NO_PACK
555#pragma pack(2)
556#endif /* _NO_PACK */
557
558typedef struct {
559
560        union {
561                char    flag;
562                char    byteint;
563                short   shortint;
564                char    percent;
565                long    integer;
566                long    hex;
567                long    octal;
568                long    big[2];
569#if FLOATING_POINT_SUPPORT
570                double  floating;
571#endif /* FLOATING_POINT_SUPPORT */
572                char_t  *string;
573                char    *bytes;
574                char_t  *errmsg;
575                void    *symbol;
576        } value;
577
578        vtype_t                 type            : 16;
579        unsigned int    valid           : 8;
580        unsigned int    allocated       : 8;            /* String was balloced */
581} value_t;
582
583#ifndef __NO_PACK
584#pragma pack()
585#endif /* __NO_PACK */
586
587/*
588 *      Allocation flags
589 */
590#define VALUE_ALLOCATE          0x1
591
592#define value_numeric(t)        (t >= byteint && t <= big)
593#define value_str(t)            (t >= string && t <= bytes)
594#define value_ok(t)             (t > undefined && t <= symbol)
595
596#define VALUE_VALID                     { {0}, integer, 1 }
597#define VALUE_INVALID           { {0}, undefined, 0 }
598
599/******************************************************************************/
600/*
601 *      A ring queue allows maximum utilization of memory for data storage and is
602 *      ideal for input/output buffering. This module provides a highly effecient
603 *      implementation and a vehicle for dynamic strings.
604 *
605 *      WARNING:  This is a public implementation and callers have full access to
606 *      the queue structure and pointers.  Change this module very carefully.
607 *
608 *      This module follows the open/close model.
609 *
610 *      Operation of a ringq where rq is a pointer to a ringq :
611 *
612 *              rq->buflen contains the size of the buffer.
613 *              rq->buf will point to the start of the buffer.
614 *              rq->servp will point to the first (un-consumed) data byte.
615 *              rq->endp will point to the next free location to which new data is added
616 *              rq->endbuf will point to one past the end of the buffer.
617 *
618 *      Eg. If the ringq contains the data "abcdef", it might look like :
619 *
620 *      +-------------------------------------------------------------------+
621 *  |   |   |   |   |   |   |   | a | b | c | d | e | f |   |   |   |   |
622 *      +-------------------------------------------------------------------+
623 *    ^                           ^                       ^               ^
624 *    |                           |                       |               |
625 *  rq->buf                    rq->servp               rq->endp      rq->enduf
626 *     
627 *      The queue is empty when servp == endp.  This means that the queue will hold
628 *      at most rq->buflen -1 bytes.  It is the fillers responsibility to ensure
629 *      the ringq is never filled such that servp == endp.
630 *
631 *      It is the fillers responsibility to "wrap" the endp back to point to
632 *      rq->buf when the pointer steps past the end. Correspondingly it is the
633 *      consumers responsibility to "wrap" the servp when it steps to rq->endbuf.
634 *      The ringqPutc and ringqGetc routines will do this automatically.
635 */
636
637/*
638 *      Ring queue buffer structure
639 */
640typedef struct {
641        unsigned char   *buf;                           /* Holding buffer for data */
642        unsigned char   *servp;                         /* Pointer to start of data */
643        unsigned char   *endp;                          /* Pointer to end of data */
644        unsigned char   *endbuf;                        /* Pointer to end of buffer */
645        int                             buflen;                         /* Length of ring queue */
646        int                             maxsize;                        /* Maximum size */
647        int                             increment;                      /* Growth increment */
648} ringq_t;
649
650/*
651 *      Block allocation (balloc) definitions
652 */
653#ifdef  B_STATS
654#ifndef B_L
655#define B_L                             T(__FILE__), __LINE__
656#define B_ARGS_DEC              char_t *file, int line
657#define B_ARGS                  file, line
658#endif /* B_L */
659#endif /* B_STATS */
660
661/*
662 *      Block classes are: 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192,
663 *                                         16384, 32768, 65536
664 */
665typedef struct {
666        union {
667                void    *next;                                                  /* Pointer to next in q */
668                int             size;                                                   /* Actual requested size */
669        } u;
670        int                     flags;                                                  /* Per block allocation flags */
671} bType;
672
673#define B_SHIFT                 4                                       /* Convert size to class */
674#define B_ROUND                 ((1 << (B_SHIFT)) - 1)
675#define B_MAX_CLASS             13                                      /* Maximum class number + 1 */
676#define B_MALLOCED              0x80000000                      /* Block was malloced */
677#define B_DEFAULT_MEM   (64 * 1024)                     /* Default memory allocation */
678#define B_MAX_FILES             (512)                           /* Maximum number of files */
679#define B_FILL_CHAR             (0x77)                          /* Fill byte for buffers */
680#define B_FILL_WORD             (0x77777777)            /* Fill word for buffers */
681#define B_MAX_BLOCKS    (64 * 1024)                     /* Maximum allocated blocks */
682
683/*
684 *      Flags. The integrity value is used as an arbitrary value to fill the flags.
685 */
686#define B_INTEGRITY                     0x8124000               /* Integrity value */
687#define B_INTEGRITY_MASK        0xFFFF000               /* Integrity mask */
688#define B_USE_MALLOC            0x1                             /* Okay to use malloc if required */
689#define B_USER_BUF                      0x2                             /* User supplied buffer for mem */
690
691/*
692 *      The symbol table record for each symbol entry
693 */
694
695typedef struct sym_t {
696        struct sym_t    *forw;                                  /* Pointer to next hash list */
697        value_t                 name;                                   /* Name of symbol */
698        value_t                 content;                                /* Value of symbol */
699        int                             arg;                                    /* Parameter value */
700} sym_t;
701
702typedef int sym_fd_t;                                           /* Returned by symOpen */
703
704/*
705 *      Script engines
706 */
707#define EMF_SCRIPT_JSCRIPT                      0               /* javascript */
708#define EMF_SCRIPT_TCL                          1               /* tcl */
709#define EMF_SCRIPT_EJSCRIPT             2               /* Ejscript */
710#define EMF_SCRIPT_MAX                          3
711
712#define MAXINT          INT_MAX
713#define BITSPERBYTE 8
714#define BITS(type)      (BITSPERBYTE * (int) sizeof(type))
715#define STRSPACE        T("\t \n\r\t")
716
717#ifndef max
718#define max(a,b)  (((a) > (b)) ? (a) : (b))
719#endif /* max */
720
721#ifndef min
722#define min(a,b)  (((a) < (b)) ? (a) : (b))
723#endif /* min */
724
725/******************************************************************************/
726/*                                  CRON                                      */
727/******************************************************************************/
728
729typedef struct {
730        char_t  *minute;
731        char_t  *hour;
732        char_t  *day;
733        char_t  *month;
734        char_t  *dayofweek;
735} cron_t;
736
737extern long             cronUntil(cron_t *cp, int period, time_t testTime);
738extern int              cronAlloc(cron_t *cp, char_t *str);
739extern int              cronFree(cron_t *cp);
740
741/******************************************************************************/
742/*                                 SOCKET                                     */
743/******************************************************************************/
744/*
745 *      Socket flags
746 */
747
748#if (WIN || CE) && WEBS
749#define EWOULDBLOCK             WSAEWOULDBLOCK
750#define ENETDOWN                WSAENETDOWN
751#define ECONNRESET              WSAECONNRESET
752#endif /* (WIN || CE) && WEBS) */
753
754#define SOCKET_EOF                              0x1                     /* Seen end of file */
755#define SOCKET_CONNECTING               0x2                     /* Connect in progress */
756#define SOCKET_BROADCAST                0x4                     /* Broadcast mode */
757#define SOCKET_PENDING                  0x8                     /* Message pending on this socket */
758#define SOCKET_FLUSHING                 0x10            /* Background flushing */
759#define SOCKET_DATAGRAM                 0x20            /* Use datagrams */
760#define SOCKET_ASYNC                    0x40            /* Use async connect */
761#define SOCKET_BLOCK                    0x80            /* Use blocking I/O */
762#define SOCKET_LISTENING                0x100           /* Socket is server listener */
763#define SOCKET_CLOSING                  0x200           /* Socket is closing */
764
765#define SOCKET_PORT_MAX                 0xffff          /* Max Port size */
766
767/*
768 *      Socket error values
769 */
770#define SOCKET_WOULDBLOCK               1                       /* Socket would block on I/O */
771#define SOCKET_RESET                    2                       /* Socket has been reset */
772#define SOCKET_NETDOWN                  3                       /* Network is down */
773#define SOCKET_AGAIN                    4                       /* Issue the request again */
774#define SOCKET_INTR                             5                       /* Call was interrupted */
775#define SOCKET_INVAL                    6                       /* Invalid */
776
777/*
778 *      Handler event masks
779 */
780#define SOCKET_READABLE                 0x2                     /* Make socket readable */
781#define SOCKET_WRITABLE                 0x4                     /* Make socket writable */
782#define SOCKET_EXCEPTION                0x8                     /* Interested in exceptions */
783#define EMF_SOCKET_MESSAGE              (WM_USER+13)
784
785#if LITTLEFOOT
786#define SOCKET_BUFSIZ                   510                     /* Underlying buffer size */
787#else
788#define SOCKET_BUFSIZ                   1024            /* Underlying buffer size */
789#endif /* LITTLEFOOT */
790
791typedef void    (*socketHandler_t)(int sid, int mask, int data);
792typedef int             (*socketAccept_t)(int sid, char *ipaddr, int port,
793                                        int listenSid);
794typedef struct {
795        char                    host[64];                               /* Host name */
796        ringq_t                 inBuf;                                  /* Input ring queue */
797        ringq_t                 outBuf;                                 /* Output ring queue */
798        ringq_t                 lineBuf;                                /* Line ring queue */
799        socketAccept_t  accept;                                 /* Accept handler */
800        socketHandler_t handler;                                /* User I/O handler */
801        int                             handler_data;                   /* User handler data */
802        int                             handlerMask;                    /* Handler events of interest */
803        int                             sid;                                    /* Index into socket[] */
804        int                             port;                                   /* Port to listen on */
805        int                             flags;                                  /* Current state flags */
806        int                             sock;                                   /* Actual socket handle */
807        int                             fileHandle;                             /* ID of the file handler */
808        int                             interestEvents;                 /* Mask of events to watch for */
809        int                             currentEvents;                  /* Mask of ready events (FD_xx) */
810        int                             selectEvents;                   /* Events being selected */
811        int                             saveMask;                               /* saved Mask for socketFlush */
812        int                             error;                                  /* Last error */
813} socket_t;
814
815/********************************* Prototypes *********************************/
816/*
817 *      Balloc module
818 *
819 */
820
821extern void      bclose();
822extern int               bopen(void *buf, int bufsize, int flags);
823
824/*
825 *      Define NO_BALLOC to turn off our balloc module altogether
826 *              #define NO_BALLOC 1
827 */
828
829#if NO_BALLOC
830#define balloc(B_ARGS, num) malloc(num)
831#define bfree(B_ARGS, p) free(p)
832#define bfreeSafe(B_ARGS, p) \
833        if (p) { free(p); } else
834#define brealloc(B_ARGS, p, num) realloc(p, num)
835extern char_t *bstrdupNoBalloc(char_t *s);
836extern char *bstrdupANoBalloc(char *s);
837#define bstrdup(B_ARGS, s) bstrdupNoBalloc(s)
838#define bstrdupA(B_ARGS, s) bstrdupANoBalloc(s)
839#define gstrdup(B_ARGS, s) bstrdupNoBalloc(s)
840
841#else /* BALLOC */
842
843#ifndef B_STATS
844#define balloc(B_ARGS, num) balloc(num)
845#define bfree(B_ARGS, p) bfree(p)
846#define bfreeSafe(B_ARGS, p) bfreeSafe(p)
847#define brealloc(B_ARGS, p, size) brealloc(p, size)
848#define bstrdup(B_ARGS, p) bstrdup(p)
849
850#if UNICODE
851#define bstrdupA(B_ARGS, p) bstrdupA(p)
852#else /* UNICODE */
853#define bstrdupA bstrdup
854#endif /* UNICODE */
855
856#endif /* B_STATS */
857
858#define gstrdup bstrdup
859extern void             *balloc(B_ARGS_DEC, int size);
860extern void             bfree(B_ARGS_DEC, void *mp);
861extern void             bfreeSafe(B_ARGS_DEC, void *mp);
862extern void             *brealloc(B_ARGS_DEC, void *buf, int newsize);
863extern char_t   *bstrdup(B_ARGS_DEC, char_t *s);
864
865#if UNICODE
866extern char *bstrdupA(B_ARGS_DEC, char *s);
867#else /* UNICODE */
868#define bstrdupA bstrdup
869#endif /* UNICODE */
870#endif /* BALLOC */
871
872extern void bstats(int handle, void (*writefn)(int handle, char_t *fmt, ...));
873
874/*
875 *      Flags. The integrity value is used as an arbitrary value to fill the flags.
876 */
877#define B_USE_MALLOC            0x1                             /* Okay to use malloc if required */
878#define B_USER_BUF                      0x2                             /* User supplied buffer for mem */
879
880
881#if !LINUX && !__rtems__
882extern char_t   *basename(char_t *name);
883#endif /* !LINUX */
884
885#if UEMF && WEBS
886/*
887 *      The open source webserver uses a different callback/timer mechanism
888 *      than other emf derivative products such as FieldUpgrader agents
889 *      so redefine those API for webserver so that they can coexist in the
890 *      same address space as the others.
891 */
892#define emfSchedCallback        websSchedCallBack
893#define emfUnschedCallback      websUnschedCallBack
894#define emfReschedCallback      websReschedCallBack
895#endif /* UEMF && WEBS */
896
897typedef void    (emfSchedProc)(void *data, int id);
898extern int              emfSchedCallback(int delay, emfSchedProc *proc, void *arg);
899extern void     emfUnschedCallback(int id);
900extern void     emfReschedCallback(int id, int delay);
901extern void             emfSchedProcess();
902extern int              emfInstGet();
903extern void             emfInstSet(int inst);
904extern void             error(E_ARGS_DEC, int flags, char_t *fmt, ...);
905extern void             (*errorSetHandler(void (*function)(int etype, char_t *msg))) \
906                                        (int etype, char_t *msg);
907
908#if B_STATS
909#define                 hAlloc(x)                               HALLOC(B_L, x)
910#define                 hAllocEntry(x, y, z)    HALLOCENTRY(B_L, x, y, z)
911extern int              HALLOC(B_ARGS_DEC, void ***map);
912extern int              HALLOCENTRY(B_ARGS_DEC, void ***list, int *max, int size);
913#else
914extern int              hAlloc(void ***map);
915extern int              hAllocEntry(void ***list, int *max, int size);
916#endif /* B_STATS */
917
918extern int              hFree(void ***map, int handle);
919
920extern int              ringqOpen(ringq_t *rq, int increment, int maxsize);
921extern void     ringqClose(ringq_t *rq);
922extern int              ringqLen(ringq_t *rq);
923
924extern int              ringqPutc(ringq_t *rq, char_t c);
925extern int              ringqInsertc(ringq_t *rq, char_t c);
926extern int              ringqPutStr(ringq_t *rq, char_t *str);
927extern int              ringqGetc(ringq_t *rq);
928
929extern int              fmtValloc(char_t **s, int n, char_t *fmt, va_list arg);
930extern int              fmtAlloc(char_t **s, int n, char_t *fmt, ...);
931extern int              fmtStatic(char_t *s, int n, char_t *fmt, ...);
932
933#if UNICODE
934extern int              ringqPutcA(ringq_t *rq, char c);
935extern int              ringqInsertcA(ringq_t *rq, char c);
936extern int              ringqPutStrA(ringq_t *rq, char *str);
937extern int              ringqGetcA(ringq_t *rq);
938#else
939#define ringqPutcA ringqPutc
940#define ringqInsertcA ringqInsertc
941#define ringqPutStrA ringqPutStr
942#define ringqGetcA ringqGetc
943#endif /* UNICODE */
944
945extern int              ringqPutBlk(ringq_t *rq, unsigned char *buf, int len);
946extern int              ringqPutBlkMax(ringq_t *rq);
947extern void     ringqPutBlkAdj(ringq_t *rq, int size);
948extern int              ringqGetBlk(ringq_t *rq, unsigned char *buf, int len);
949extern int              ringqGetBlkMax(ringq_t *rq);
950extern void     ringqGetBlkAdj(ringq_t *rq, int size);
951extern void     ringqFlush(ringq_t *rq);
952extern void     ringqAddNull(ringq_t *rq);
953
954extern int              scriptSetVar(int engine, char_t *var, char_t *value);
955extern int              scriptEval(int engine, char_t *cmd, char_t **rslt, int chan);
956
957extern void             socketClose();
958extern void             socketCloseConnection(int sid);
959extern void             socketCreateHandler(int sid, int mask, socketHandler_t
960                                        handler, int arg);
961extern void             socketDeleteHandler(int sid);
962extern int              socketEof(int sid);
963extern int              socketCanWrite(int sid);
964extern void     socketSetBufferSize(int sid, int in, int line, int out);
965extern int              socketFlush(int sid);
966extern int              socketGets(int sid, char_t **buf);
967extern int              socketGetPort(int sid);
968extern int              socketInputBuffered(int sid);
969extern int              socketOpen();
970extern int              socketOpenConnection(char *host, int port,
971                                        socketAccept_t accept, int flags);
972extern void     socketProcess(int hid);
973extern int              socketRead(int sid, char *buf, int len);
974extern int              socketReady(int hid);
975extern int              socketWrite(int sid, char *buf, int len);
976extern int              socketWriteString(int sid, char_t *buf);
977extern int              socketSelect(int hid, int timeout);
978extern int              socketGetHandle(int sid);
979extern int              socketSetBlock(int sid, int flags);
980extern int              socketGetBlock(int sid);
981extern int              socketAlloc(char *host, int port, socketAccept_t accept,
982                                        int flags);
983extern void     socketFree(int sid);
984extern int              socketGetError();
985extern socket_t *socketPtr(int sid);
986extern int              socketWaitForEvent(socket_t *sp, int events, int *errCode);
987extern void     socketRegisterInterest(socket_t *sp, int handlerMask);
988extern int              socketGetInput(int sid, char *buf, int toRead, int *errCode);
989
990extern char_t   *strlower(char_t *string);
991extern char_t   *strupper(char_t *string);
992
993extern char_t   *stritoa(int n, char_t *string, int width);
994
995extern sym_fd_t symOpen(int hash_size);
996extern void             symClose(sym_fd_t sd);
997extern sym_t    *symLookup(sym_fd_t sd, char_t *name);
998extern sym_t    *symEnter(sym_fd_t sd, char_t *name, value_t v, int arg);
999extern int              symDelete(sym_fd_t sd, char_t *name);
1000extern void     symWalk(sym_fd_t sd, void (*fn)(sym_t *symp));
1001extern sym_t    *symFirst(sym_fd_t sd);
1002extern sym_t    *symNext(sym_fd_t sd);
1003extern int              symSubOpen();
1004extern void     symSubClose();
1005
1006extern void             trace(int lev, char_t *fmt, ...);
1007extern void             traceRaw(char_t *buf);
1008extern void             (*traceSetHandler(void (*function)(int level, char_t *buf)))
1009                                        (int level, char_t *buf);
1010 
1011extern value_t  valueInteger(long value);
1012extern value_t  valueString(char_t *value, int flags);
1013extern value_t  valueErrmsg(char_t *value);
1014extern void     valueFree(value_t *v);
1015extern int              vxchdir(char *dirname);
1016
1017extern unsigned int hextoi(char_t *hexstring);
1018extern unsigned int gstrtoi(char_t *s);
1019extern                          time_t  timeMsec();
1020
1021extern char_t   *ascToUni(char_t *ubuf, char *str, int nBytes);
1022extern char     *uniToAsc(char *buf, char_t *ustr, int nBytes);
1023extern char_t   *ballocAscToUni(char  *cp, int alen);
1024extern char             *ballocUniToAsc(char_t *unip, int ulen);
1025
1026extern char_t   *basicGetHost();
1027extern char_t   *basicGetAddress();
1028extern char_t   *basicGetProduct();
1029extern void             basicSetHost(char_t *host);
1030extern void             basicSetAddress(char_t *addr);
1031
1032extern int              harnessOpen(char_t **argv);
1033extern void             harnessClose(int status);
1034extern void             harnessTesting(char_t *msg, ...);
1035extern void             harnessPassed();
1036extern void             harnessFailed(int line);
1037extern int              harnessLevel();
1038
1039#endif /* _h_UEMF */
1040
1041/******************************************************************************/
Note: See TracBrowser for help on using the repository browser.