00001
00030 #ifndef NSD_H
00031 #define NSD_H
00032
00033 #ifndef _GNU_SOURCE
00034 #define _GNU_SOURCE
00035 #endif
00036
00037 #define NSD_EXPORTS
00038 #include "ns.h"
00039
00040 #ifndef _WIN32
00041 #include <pthread.h>
00042 #include <sys/mman.h>
00043 #endif
00044 #include <assert.h>
00045
00046 #ifdef _WIN32
00047
00048 #include <fcntl.h>
00049 #include <io.h>
00050 #define STDOUT_FILENO 1
00051 #define STDERR_FILENO 2
00052 #define S_ISREG(m) ((m)&_S_IFREG)
00053 #define S_ISDIR(m) ((m)&_S_IFDIR)
00054 #include "getopt.h"
00055 #include <sys/stat.h>
00056
00057 #else
00058
00059 #include <sys/resource.h>
00060 #include <sys/wait.h>
00061 #include <sys/ioctl.h>
00062 #include <sys/stat.h>
00063 #include <ctype.h>
00064 #include <grp.h>
00065
00066 #endif
00068 #ifdef HAVE_POLL
00069 #include <poll.h>
00070 #else
00071 #define POLLIN 1
00072 #define POLLOUT 2
00073 #define POLLPRI 4
00074 #define POLLHUP 8
00075 struct pollfd {
00076 int fd;
00077 short events;
00078 short revents;
00079 };
00080 extern int poll(struct pollfd *, unsigned long, int);
00081 #endif
00082
00083 #ifdef __linux
00084 #include <sys/prctl.h>
00085 #endif
00086 #ifdef __hp
00087 #define seteuid(i) setresuid((-1),(i),(-1))
00088 #endif
00089 #ifdef __sun
00090 #include <sys/filio.h>
00091 #include <sys/systeminfo.h>
00092 #define gethostname(b,s) (!(sysinfo(SI_HOSTNAME, b, s) > 0))
00093 #endif
00094 #ifdef __unixware
00095 #include <sys/filio.h>
00096 #endif
00097
00098 #ifndef F_CLOEXEC
00099 #define F_CLOEXEC 1
00100 #endif
00101
00102 #ifdef _WIN32
00103 #define NS_SIGTERM 1
00104 #define NS_SIGHUP 2
00105 #else
00106 #define NS_SIGTERM SIGTERM
00107 #define NS_SIGHUP SIGHUP
00108 #endif
00109
00110 #define _MAX(x,y) ((x) > (y) ? (x) : (y))
00111 #define _MIN(x,y) ((x) > (y) ? (y) : (x))
00112
00117 #define NSD_NAME "AOLserver"
00118 #define NSD_VERSION NS_PATCH_LEVEL
00119 #define NSD_LABEL "aolserver4_5"
00120 #define NSD_TAG "$Name: $"
00121 #define NS_CONFIG_PARAMETERS "ns/parameters"
00122 #define NS_CONFIG_THREADS "ns/threads"
00123
00124 #define ADP_OK 0
00125 #define ADP_BREAK 1
00126 #define ADP_ABORT 2
00127 #define ADP_RETURN 4
00128
00135 #define NSD_TEXTHTML "text/html; charset=iso-8859-1"
00136
00141 typedef int bool;
00142
00143 struct _nsconf {
00144 char *argv0;
00145 char *nsd;
00146 char *name;
00147 char *version;
00148 char *home;
00149 char *config;
00150 char *build;
00151 int pid;
00152 time_t boot_t;
00153 char hostname[255];
00154 char address[16];
00155 int shutdowntimeout;
00156 int backlog;
00157 int debug;
00158
00163 struct {
00164 Ns_Mutex lock;
00165 Ns_Cond cond;
00166 int started;
00167 int stopping;
00168 } state;
00169
00175 struct {
00176 unsigned int major;
00177 unsigned int minor;
00178 } http;
00179
00180 struct {
00181 int maxelapsed;
00182 } sched;
00183
00184 #ifdef _WIN32
00185 struct {
00186 bool checkexit;
00187 } exec;
00188 #endif
00189
00190 struct {
00191 char *sharedlibrary;
00192 char *version;
00193 bool lockoninit;
00194 } tcl;
00195
00196 };
00197
00198 extern struct _nsconf nsconf;
00199
00205 typedef struct FileKey {
00206 dev_t dev;
00207 ino_t ino;
00208 } FileKey;
00209
00210 #define FILE_KEYS (sizeof(FileKey)/sizeof(int))
00211
00216 typedef struct AdpFrame {
00217 struct AdpFrame *prevPtr;
00218 int line;
00219 int objc;
00220 Tcl_Obj *ident;
00221 Tcl_Obj **objv;
00222 char *savecwd;
00223 char *file;
00224 Ns_DString cwdbuf;
00225 Tcl_DString *outputPtr;
00226 } AdpFrame;
00227
00238 typedef struct AdpCode {
00239 int nblocks;
00240 int nscripts;
00241 int *len;
00242 int *line;
00243 Tcl_DString text;
00244 } AdpCode;
00245
00246 #define AdpCodeLen(cp,i) ((cp)->len[(i)])
00247 #define AdpCodeLine(cp,i) ((cp)->line[(i)])
00248 #define AdpCodeText(cp) ((cp)->text.string)
00249 #define AdpCodeBlocks(cp) ((cp)->nblocks)
00250 #define AdpCodeScripts(cp) ((cp)->nscripts)
00251
00256 #define ADP_SAFE 0x01
00257 #define ADP_SINGLE 0x02
00258 #define ADP_DEBUG 0x04
00259 #define ADP_EXPIRE 0x08
00260 #define ADP_NOCACHE 0x10
00261 #define ADP_TRACE 0x20
00262 #define ADP_GZIP 0x80
00263 #define ADP_DETAIL 0x100
00264 #define ADP_STRICT 0x200
00265 #define ADP_DISPLAY 0x400
00266 #define ADP_TRIM 0x800
00267 #define ADP_FLUSHED 0x1000
00268 #define ADP_ERRLOGGED 0x2000
00269 #define ADP_AUTOABORT 0x4000
00270 #define ADP_EVAL_FILE 0x8000
00277 struct NsServer;
00278
00279 typedef struct Driver {
00280
00285 void *arg;
00286 char *server;
00287 char *module;
00288 char *name;
00289 char *location;
00290 char *address;
00291 int sendwait;
00292 int recvwait;
00293 int bufsize;
00294 int sndbuf;
00295 int rcvbuf;
00301 struct Driver *nextPtr;
00302 struct NsServer *servPtr;
00303 char *fullname;
00304 int flags;
00305 Ns_Thread thread;
00306 Ns_Mutex lock;
00307 Ns_Cond cond;
00309 int trigger[2];
00311 Ns_DriverProc *proc;
00312 int opts;
00314 int closewait;
00315 int keepwait;
00316 char *bindaddr;
00317 int port;
00318 int backlog;
00320 int maxline;
00321 int maxheader;
00322 int maxinput;
00324 struct Sock *freeSockPtr;
00325 int maxsock;
00326 int nactive;
00327 unsigned int nextid;
00329 Ns_Thread *readers;
00330 int maxreaders;
00331 int nreaders;
00332 int idlereaders;
00334 struct Sock *readSockPtr;
00335 struct Sock *runSockPtr;
00336 struct Sock *closeSockPtr;
00338 struct Conn *firstConnPtr;
00339 struct Conn *lastConnPtr;
00340 struct Conn *freeConnPtr;
00342 struct QueWait *freeQueWaitPtr;
00343
00344 Tcl_DString *queryPtr;
00346 struct {
00347 unsigned int spins;
00348 unsigned int accepts;
00349 unsigned int reads;
00350 unsigned int writes;
00351 unsigned int queued;
00352 unsigned int timeout;
00353 unsigned int overflow;
00354 unsigned int dropped;
00355 } stats;
00356
00357 } Driver;
00358
00366 typedef struct Sock {
00371 struct Driver *drvPtr;
00372 SOCKET sock;
00373 void *arg;
00374
00379 struct Sock *nextPtr;
00380 struct Conn *connPtr;
00381 struct sockaddr_in sa;
00382 unsigned int id;
00383 int state;
00384 int pidx;
00385 Ns_Time acceptTime;
00386 Ns_Time timeout;
00387 unsigned int nreads;
00388 unsigned int nwrites;
00389 } Sock;
00390
00395 typedef struct Limits {
00396 Ns_Mutex lock;
00397 char *name;
00398 unsigned int maxrun;
00399 unsigned int maxwait;
00400 unsigned int nrunning;
00401 unsigned int nwaiting;
00402 unsigned int ndropped;
00403 unsigned int noverflow;
00404 unsigned int ntimeout;
00405 size_t maxupload;
00406 int timeout;
00407 } Limits;
00408
00414 typedef struct Conn {
00419 Ns_Request *request;
00420 Ns_Set *headers;
00421 Ns_Set *outputheaders;
00422 char *authUser;
00423 char *authPasswd;
00424 int contentLength;
00425 int flags;
00426
00431 struct Conn *nextPtr;
00432 struct Conn *prevPtr;
00433 struct Sock *sockPtr;
00434 struct Limits *limitsPtr;
00435
00440 unsigned int major;
00441 unsigned int minor;
00442
00447 char *rstart;
00448 char *rend;
00449
00455 char *server;
00456 char *location;
00457 struct NsServer *servPtr;
00458 struct Driver *drvPtr;
00459
00460 unsigned int id;
00461 char idstr[16];
00462 struct {
00463 Ns_Time accept;
00464 Ns_Time read;
00465 Ns_Time ready;
00466 Ns_Time queue;
00467 Ns_Time run;
00468 Ns_Time close;
00469 Ns_Time done;
00470 } times;
00471 struct NsInterp *itPtr;
00472 char *type;
00473 Tcl_Encoding outputEncoding;
00474 Tcl_Encoding urlEncoding;
00475 Tcl_Encoding queryEncoding;
00476 int nContentSent;
00477 int status;
00478 int responseLength;
00479 int recursionCount;
00480 Ns_Set *query;
00481 Tcl_HashTable files;
00482
00487 char peer[16];
00488 int port;
00494 void *cls[NS_CONN_MAXCLS];
00495 struct QueWait *queWaitPtr;
00496
00502 char *next;
00503 size_t avail;
00504 char *content;
00505 int tfd;
00506 void *map;
00507 void *maparg;
00518 int roff;
00519 Tcl_DString ibuf;
00520 Tcl_DString obuf;
00522 } Conn;
00523
00528 typedef struct Pool {
00529 Ns_Mutex lock;
00530 Ns_Cond cond;
00531 char *name;
00532 int shutdown;
00533
00539 struct {
00540 struct {
00541 int num;
00542 struct Conn *firstPtr;
00543 struct Conn *lastPtr;
00544 } wait;
00545 struct {
00546 struct Conn *firstPtr;
00547 struct Conn *lastPtr;
00548 } active;
00549 } queue;
00550
00561 struct {
00562 unsigned int nextid;
00563 int min;
00564 int max;
00565 int current;
00566 int idle;
00567 int timeout;
00568 int maxconns;
00569 unsigned int queued;
00570 } threads;
00571
00572 } Pool;
00573
00574 #define SERV_AOLPRESS 0x0001
00575 #define SERV_CHUNKED 0x0002
00576 #define SERV_MODSINCE 0x0004
00577 #define SERV_NOTICEDETAIL 0x0008
00578 #define SERV_GZIP 0x0010
00584 typedef struct Nsv {
00585 struct Bucket *buckets;
00586 int nbuckets;
00587 } Nsv;
00588
00593 typedef struct NsServer {
00594 char *server;
00595 Ns_LocationProc *locationProc;
00596
00601 char *defcharset;
00602
00610 Tcl_Encoding urlEncoding;
00611
00618 Tcl_Encoding inputEncoding;
00619
00624 struct {
00625 int flags;
00626 size_t gzipmin;
00627 int gziplevel;
00628 char *realm;
00629 Ns_HeaderCaseDisposition hdrcase;
00630 } opts;
00631
00636 struct {
00637 int errorminsize;
00638 int connsperthread;
00639 } limits;
00640
00641 struct {
00642 char *pageroot;
00643 char **dirv;
00644 int dirc;
00645 char *dirproc;
00646 char *diradp;
00647 bool mmap;
00648 int cachemaxentry;
00649 Ns_UrlToFileProc *url2file;
00650 Ns_Cache *cache;
00651 } fastpath;
00652
00657 struct {
00658 Ns_RequestAuthorizeProc *authProc;
00659 Tcl_HashTable redirect;
00660 Tcl_HashTable proxy;
00661 Ns_Mutex plock;
00662 } request;
00663
00668 struct {
00669 struct Filter *firstFilterPtr;
00670 struct Trace *firstTracePtr;
00671 struct Trace *firstCleanupPtr;
00672 } filter;
00673
00678 struct {
00683 char *initfile;
00684
00689 Tcl_HashTable loops;
00690 Ns_Mutex llock;
00691 Ns_Cond lcond;
00692
00697 Ns_RWLock tlock;
00698 struct TclTrace *firstTracePtr;
00699 struct TclTrace *lastTracePtr;
00700 Ns_Cs olock;
00701 Tcl_HashTable once;
00702 Ns_Mutex plock;
00703 Tcl_HashTable packages;
00709 char *library;
00710 char *script;
00711 int length;
00712 int epoch;
00713 Ns_RWLock slock;
00714 Tcl_DString modules;
00715 } tcl;
00716
00722 struct {
00723 int flags;
00724 int tracesize;
00725 char *errorpage;
00726 char *startpage;
00727 char *debuginit;
00728 size_t bufsize;
00729 size_t cachesize;
00730 Ns_Cond pagecond;
00731 Ns_Mutex pagelock;
00732 Tcl_HashTable pages;
00733 Ns_RWLock taglock;
00734 Tcl_HashTable tags;
00735 } adp;
00736
00742 struct {
00743 Ns_Mutex lock;
00744 Tcl_HashTable table;
00745 } sets;
00746
00751 Nsv nsv;
00752
00758 struct {
00759 Ns_Mutex lock;
00760 Tcl_HashTable table;
00761 } var;
00762
00769 struct {
00770 Ns_Cs cs;
00771 Ns_Mutex lock;
00772 Ns_Cond cond;
00773 Tcl_HashTable inits;
00774 Tcl_HashTable vars;
00775 } share;
00776
00782 struct {
00783 Ns_Mutex lock;
00784 Tcl_HashTable table;
00785 } chans;
00786
00787 } NsServer;
00788
00793 typedef struct NsInterp {
00794 struct NsInterp *nextPtr;
00795 Tcl_Interp *interp;
00796 NsServer *servPtr;
00797 int delete;
00798 int epoch;
00806 struct Defer *firstDeferPtr;
00807
00814 struct AtClose *firstAtClosePtr;
00815
00822 #define CONN_TCLFORM 1
00823 #define CONN_TCLHDRS 2
00824 #define CONN_TCLOUTHDRS 4
00825
00826 Ns_Conn *conn;
00827
00828 struct nsconn {
00829 int flags;
00830 char form[16];
00831 char hdrs[16];
00832 char outhdrs[16];
00833 } nsconn;
00834
00840 struct adp {
00841 int flags;
00842 int exception;
00843 int refresh;
00844 size_t bufsize;
00845 int errorLevel;
00846 int debugLevel;
00847 int debugInit;
00848 char *debugFile;
00849 Ns_Cache *cache;
00850 int depth;
00851 char *cwd;
00852 struct AdpFrame *framePtr;
00853 Ns_Conn *conn;
00854 Tcl_Channel chan;
00855 Tcl_DString output;
00856 } adp;
00857
00863 Tcl_HashTable sets;
00864
00870 Tcl_HashTable chans;
00871
00876 Tcl_HashTable https;
00877
00878 } NsInterp;
00879
00884 extern void NsInitBinder(void);
00885 extern void NsInitCache(void);
00886 extern void NsInitConf(void);
00887 extern void NsInitConfig(void);
00888 extern void NsInitEncodings(void);
00889 extern void NsInitFd(void);
00890 extern void NsInitListen(void);
00891 extern void NsInitLog(void);
00892 extern void NsInitMimeTypes(void);
00893 extern void NsInitModLoad(void);
00894 extern void NsInitNsv(void);
00895 extern void NsInitProcInfo(void);
00896 extern void NsInitQueue(void);
00897 extern void NsInitLimits(void);
00898 extern void NsInitPools(void);
00899 extern void NsInitDrivers(void);
00900 extern void NsInitSched(void);
00901 extern void NsInitServers(void);
00902 extern void NsInitTcl(void);
00903 extern void NsInitTclCache(void);
00904 extern void NsInitUrlSpace(void);
00905 extern void NsInitRequests(void);
00906 extern char *NsFindVersion(char *request, unsigned int *majorPtr,
00907 unsigned int *minorPtr);
00908 extern void NsQueueConn(Conn *connPtr);
00909 extern int NsCheckQuery(Ns_Conn *conn);
00910 extern void NsAppendConn(Tcl_DString *bufPtr, Conn *connPtr, char *state);
00911 extern void NsAppendRequest(Tcl_DString *dsPtr, Ns_Request *request);
00912 extern int NsConnSend(Ns_Conn *conn, struct iovec *bufs, int nbufs);
00913 extern void NsSockClose(Sock *sockPtr, int keep);
00914 extern int NsPoll(struct pollfd *pfds, int nfds, Ns_Time *timeoutPtr);
00915 extern void NsFreeConn(Conn *connPtr);
00916 extern NsServer *NsGetServer(char *server);
00917 extern char *NsGetServers(void);
00918 extern NsServer *NsGetInitServer(void);
00919 extern NsInterp *NsGetInterpData(Tcl_Interp *interp);
00920 extern void NsFreeConnInterp(Conn *connPtr);
00921 extern Ns_OpProc NsAdpProc;
00922
00923 extern Ns_Cache *NsFastpathCache(char *server, int size);
00924 extern void NsAdpInit(NsInterp *itPtr);
00925 extern void NsAdpReset(NsInterp *itPtr);
00926 extern void NsAdpFree(NsInterp *itPtr);
00927 extern void NsTclRunAtClose(NsInterp *itPtr);
00928 extern int NsUrlToFile(Ns_DString *dsPtr, NsServer *servPtr, char *url);
00929
00934 extern Ns_Callback NsTclCallback;
00935 extern Ns_Callback NsTclSignalProc;
00936 extern Ns_SchedProc NsTclSchedProc;
00937 extern Ns_ArgProc NsTclArgProc;
00938 extern Ns_ThreadProc NsTclThread;
00939 extern Ns_ArgProc NsTclThreadArgProc;
00940 extern Ns_Callback NsCachePurge;
00941 extern Ns_ArgProc NsCacheArgProc;
00942 extern Ns_SockProc NsTclSockProc;
00943 extern Ns_ArgProc NsTclSockArgProc;
00944 extern Ns_ThreadProc NsConnThread;
00945 extern Ns_ArgProc NsConnArgProc;
00946
00947 extern void NsGetCallbacks(Tcl_DString *dsPtr);
00948 extern void NsGetSockCallbacks(Tcl_DString *dsPtr);
00949 extern void NsGetScheduled(Tcl_DString *dsPtr);
00950
00951 extern char *NsConnContent(Ns_Conn *conn, char **nextPtr, int *availPtr);
00952 extern void NsConnSeek(Ns_Conn *conn, int count);
00953 extern void *NsMap(int fd, off_t start, size_t len, int writeable, void **argPtr);
00954 extern void NsUnMap(void *addr, void *arg);
00955
00956 #ifdef _WIN32
00957 extern int NsConnectService(void);
00958 extern int NsInstallService(char *service);
00959 extern int NsRemoveService(char *service);
00960 #endif
00961
00962 extern void NsCreatePidFile(char *service);
00963 extern void NsRemovePidFile(char *service);
00964
00965 extern void NsLogOpen(void);
00966 extern void NsLogConf(void);
00967 extern void NsTclInitObjs(void);
00968 extern void NsUpdateMimeTypes(void);
00969 extern void NsUpdateEncodings(void);
00970 extern void NsRunPreStartupProcs(void);
00971 extern void NsBlockSignals(int debug);
00972 extern void NsHandleSignals(void);
00973 extern void NsStopDrivers(void);
00974 extern void NsPreBind(char *bindargs, char *bindfile);
00975 extern SOCKET NsSockGetBound(struct sockaddr_in *saPtr);
00976 extern void NsClosePreBound(void);
00977 extern void NsInitServer(char *server, Ns_ServerInitProc *initProc);
00978 extern char *NsConfigRead(char *file);
00979 extern void NsConfigEval(char *config, int argc, char **argv, int optind);
00980 extern void NsConfUpdate(void);
00981 extern void NsEnableDNSCache(void);
00982 extern void NsStartPools(void);
00983 extern void NsStopPools(Ns_Time *timeoutPtr);
00984 extern int NsTclGetPool(Tcl_Interp *interp, char *pool, Pool **poolPtrPtr);
00985 extern Tcl_ObjCmdProc NsTclListPoolsObjCmd;
00986 extern void NsCreateConnThread(Pool *poolPtr);
00987 extern void NsJoinConnThreads(void);
00988 extern int NsStartDrivers(void);
00989 extern void NsWaitDriversShutdown(Ns_Time *toPtr);
00990 extern void NsStartSchedShutdown(void);
00991 extern void NsWaitSchedShutdown(Ns_Time *toPtr);
00992 extern void NsStartSockShutdown(void);
00993 extern void NsWaitSockShutdown(Ns_Time *toPtr);
00994 extern void NsStartShutdownProcs(void);
00995 extern void NsWaitShutdownProcs(Ns_Time *toPtr);
00996 extern void NsWaitDriversShutdown(Ns_Time *toPtr);
00997 extern void NsStartQueueShutdown(void);
00998 extern void NsWaitQueueShutdown(Ns_Time *toPtr);
00999
01000 extern void NsStartJobsShutdown(void);
01001 extern void NsWaitJobsShutdown(Ns_Time *toPtr);
01002
01003 extern void NsTclInitServer(char *server);
01004 extern int NsTclGetServer(NsInterp *itPtr, char **serverPtr);
01005 extern int NsTclGetConn(NsInterp *itPtr, Ns_Conn **connPtr);
01006 extern void NsLoadModules(char *server);
01007 extern struct Bucket *NsTclCreateBuckets(char *server, int nbuckets);
01008 extern void NsClsCleanup(Conn *connPtr);
01009 extern void NsTclAddCmds(Tcl_Interp *interp, NsInterp *itPtr);
01010 extern void NsRestoreSignals(void);
01011 extern void NsSendSignal(int sig);
01012
01017 extern Limits *NsGetRequestLimits(char *server, char *method, char *url);
01018 extern Pool *NsGetConnPool(Conn *connPtr);
01019
01024 extern Ns_Cache *NsAdpCache(char *server, int size);
01025 extern void NsAdpSetMimeType(NsInterp *itPtr, char *type);
01026 extern void NsAdpSetCharSet(NsInterp *itPtr, char *charset);
01027 extern int NsAdpGetBuf(NsInterp *itPtr, Tcl_DString **dsPtrPtr);
01028 extern int NsAdpAppend(NsInterp *itPtr, char *buf, int len);
01029 extern int NsAdpFlush(NsInterp *itPtr, int stream);
01030 extern int NsAdpDebug(NsInterp *itPtr, char *host, char *port, char *procs);
01031 extern int NsAdpEval(NsInterp *itPtr, int objc, Tcl_Obj *objv[], int flags,
01032 char *resvar);
01033 extern int NsAdpSource(NsInterp *itPtr, int objc, Tcl_Obj *objv[],
01034 int flags, char *resvar);
01035 extern int NsAdpInclude(NsInterp *itPtr, int objc, Tcl_Obj *objv[],
01036 char *file, Ns_Time *ttlPtr);
01037 extern void NsAdpParse(AdpCode *codePtr, NsServer *servPtr, char *utf,
01038 int flags);
01039 extern void NsAdpFreeCode(AdpCode *codePtr);
01040 extern void NsAdpLogError(NsInterp *itPtr);
01041
01046 extern int NsTclCheckConnId(Tcl_Interp *interp, Tcl_Obj *objPtr);
01047 extern void NsTclInitQueueType(void);
01048 extern void NsTclInitAddrType(void);
01049 extern void NsTclInitCacheType(void);
01050 extern void NsTclInitKeylistType(void);
01051 extern void NsTclInitTimeType(void);
01052
01057 extern int NsRunFilters(Ns_Conn *conn, int why);
01058 extern void NsRunCleanups(Ns_Conn *conn);
01059 extern void NsRunTraces(Ns_Conn *conn);
01060 extern void NsRunPreStartupProcs(void);
01061 extern void NsRunSignalProcs(void);
01062 extern void NsRunStartupProcs(void);
01063 extern void NsRunAtReadyProcs(void);
01064 extern void NsRunAtExitProcs(void);
01065
01070 extern bool NsParamBool(char *key, bool def);
01071 extern int NsParamInt(char *key, int def);
01072 extern char *NsParamString(char *key, char *def);
01073
01074 extern int NsCloseAllFiles(int errFd);
01075 #ifndef _WIN32
01076 extern int Ns_ConnRunRequest(Ns_Conn *conn);
01077 extern int Ns_GetGid(char *group);
01078 extern int Ns_GetUserGid(char *user);
01079 extern int Ns_TclGetOpenFd(Tcl_Interp *, char *, int write, int *fp);
01080 #endif
01081 extern void NsStopSockCallbacks(void);
01082 extern void NsStopScheduledProcs(void);
01083 extern Tcl_Encoding NsGetInputEncoding(Conn *connPtr);
01084 extern Tcl_Encoding NsGetOutputEncoding(Conn *connPtr);
01085
01090 extern int NsConnRunProxyRequest(Ns_Conn *conn);
01091
01092 #endif