#ifndef HTTPD_H #define HTTPD_H /**************/ /* Don't include bsdsocket.library pragmas; we use our own stubs */ #define PRAGMAS_SOCKET_PRAGMAS_H #include #include #include #include #include #include #include #include #include #include #include #include #include "options.h" #include #include /**************/ #ifdef _DCC # define close(s) CloseSocket(s) # define gmtime localtime #endif /* exit() is never called directly from the main program. Whenever a * subprocess calls exit(), we really want it to go to request_exit(). */ #define exit request_exit /**************/ typedef struct _Alias { struct _Alias *next, *prev; char *http_path, *real_path; } Alias; typedef struct _DocType { struct _DocType *next, *prev; char *type, **ext; int numext; } DocType; /* for file routines from multi.c */ typedef struct { BPTR fh; long flags; char *buf; int bufsize; char *rptr; /* current read position in buffer */ int rleft; /* bytes left to read in buffer */ char *wptr; /* same for write. NOTE: only one of (rptr/rleft) */ int wleft; /* and (wptr/wleft) is active at once. */ } mFILE; #define MF_READ 1 /* readable */ #define MF_WRITE 2 /* writable */ #define MF_SEEK 4 /* seekable */ #define MF_NOCLOSE 8 /* don't close file handle on Fclose() */ /* (used by Fdup()) */ typedef struct { struct Library *socketBase; mFILE *access_log, *error_log; jmp_buf exit_ptr; } taskData; /* For easy access to the log file pointers. */ #define logfile (((taskData *)FindTask(NULL)->tc_UserData)->access_log) #define errlog (((taskData *)FindTask(NULL)->tc_UserData)->error_log) /**************/ extern char *docroot; /* Root directory for documents */ extern char *servroot; /* Server's root directory */ extern char *userdir; /* Subdirectory for ~user requests */ extern char *dirindex; /* Index file for a directory */ extern Alias *aliases; /* List of directory aliases */ extern Alias *script_aliases; /* List of script directories */ extern DocType *mime_types; /* List of extensions for MIME types */ /**************/ /* conf.c */ extern int readconf(void); /* forkproc.c */ extern struct Process *forkproc(__stkargs void (*)(void *), void *); /* httpd.h */ extern void request_exit(int); /* misc.c */ extern void *salloc(size_t); extern void *srealloc(void *, size_t); extern struct tm *parse_date(char *); extern int timecmp(const struct tm *, const struct tm *); extern char *fgets2(char *, size_t, FILE *); extern char *Fgets2(char *, size_t, mFILE *); extern int sgetc(int); extern char *sgets(char *, size_t, int); extern char *sgets2(char *, size_t, int); extern int sputs(char *, int); extern int sockprintf(int, char *, ...); extern void outerr(char *, ...); extern int OpenSocketLibrary(void); extern void CloseSocketLibrary(void); mFILE *Popen(const char *, const char *); int Pclose(mFILE *); /* multi.c */ mFILE *Fopen(const char *, const char *); mFILE *Fdup(mFILE *); void Fclose(mFILE *); size_t Fread(void *, size_t, size_t, mFILE *); size_t Fwrite(void *, size_t, size_t, mFILE *); int Fgetc(mFILE *); int Fputc(int, mFILE *); char *Fgets(char *, size_t, mFILE *); int Fputs(char *, mFILE *); void Fseek(mFILE *, size_t, int); size_t Ftell(mFILE *); void Fflush(mFILE *); char *Fname(char *, size_t, mFILE *); /**************/ #endif /* HTTPD_H */