X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=include%2Ffcgiapp.h;h=9abd2c61cf70634706a691486131b6e8641f234f;hb=4f1b54feadf7665251d44f2475e92a497c8c7190;hp=f05e36dacd95e8ebd119622995991b1f9c3c1911;hpb=5a7cc494a162ca797165a84433f90788b1e7950d;p=catagits%2Ffcgi2.git diff --git a/include/fcgiapp.h b/include/fcgiapp.h index f05e36d..9abd2c6 100644 --- a/include/fcgiapp.h +++ b/include/fcgiapp.h @@ -1,4 +1,4 @@ -/* +/* * fcgiapp.h -- * * Definitions for FastCGI application server programs @@ -9,33 +9,31 @@ * See the file "LICENSE.TERMS" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * $Id: fcgiapp.h,v 1.2 1999/07/26 04:28:10 roberts Exp $ + * $Id: fcgiapp.h,v 1.8 2001/06/22 14:19:23 robs Exp $ */ #ifndef _FCGIAPP_H #define _FCGIAPP_H -#ifndef TCL_LIBRARY /* Hack to see if we are building TCL since TCL - * needs varargs not stdarg - */ -#ifdef _WIN32 -#ifndef DLLAPI -#define DLLAPI __declspec(dllimport) -#endif -#else -#define DLLAPI -#endif - +/* Hack to see if we are building TCL - TCL needs varargs not stdarg */ +#ifndef TCL_LIBRARY #include #else #include -#endif /* TCL_LIBARARY */ -#include "fcgi_config.h" +#endif #if defined (c_plusplus) || defined (__cplusplus) extern "C" { #endif +#ifndef DLLAPI +#ifdef _WIN32 +#define DLLAPI __declspec(dllimport) +#else +#define DLLAPI +#endif +#endif + /* * Error codes. Assigned to avoid conflict with EOF and errno(2). */ @@ -78,22 +76,36 @@ typedef struct FCGX_Stream { typedef char **FCGX_ParamArray; /* - * State associated with a request. + * FCGX_Request Flags + * + * Setting FCGI_FAIL_ACCEPT_ON_INTR prevents FCGX_Accept() from + * restarting upon being interrupted. + */ +#define FCGI_FAIL_ACCEPT_ON_INTR 1 + +/* + * FCGX_Request -- State associated with a request. * - * Its exposed for API simplicity, DON'T use it - it WILL change! + * Its exposed for API simplicity, I expect parts of it to change! */ typedef struct FCGX_Request { + int requestId; /* valid if isBeginProcessed */ + int role; + FCGX_Stream *in; + FCGX_Stream *out; + FCGX_Stream *err; + char **envp; + + /* Don't use anything below here */ + + struct Params *paramsPtr; int ipcFd; /* < 0 means no connection */ int isBeginProcessed; /* FCGI_BEGIN_REQUEST seen */ - int requestId; /* valid if isBeginProcessed */ int keepConnection; /* don't close ipcFd at end of request */ - int role; int appStatus; int nWriters; /* number of open writers (0..2) */ - FCGX_Stream *inStream; - FCGX_Stream *outStream; - FCGX_Stream *errStream; - struct Params *paramsPtr; + int flags; + int listen_sock; } FCGX_Request; @@ -132,20 +144,42 @@ DLLAPI int FCGX_Init(void); /* *---------------------------------------------------------------------- * + * FCGX_OpenSocket -- + * + * Create a FastCGI listen socket. + * + * path is the Unix domain socket (named pipe for WinNT), or a colon + * followed by a port number. e.g. "/tmp/fastcgi/mysocket", ":5000" + * + * backlog is the listen queue depth used in the listen() call. + * + * Returns the socket's file descriptor or -1 on error. + * + *---------------------------------------------------------------------- + */ +DLLAPI int FCGX_OpenSocket(const char *path, int backlog); + +/* + *---------------------------------------------------------------------- + * * FCGX_InitRequest -- * - * Initialize a FCGX_Request for use with FCGX_Accept_r(). + * Initialize a FCGX_Request for use with FCGX_Accept_r(). * + * sock is a file descriptor returned by FCGX_OpenSocket() or 0 (default). + * The only supported flag at this time is FCGI_FAIL_ON_INTR. + * + * Returns 0 upon success. *---------------------------------------------------------------------- */ -DLLAPI void FCGX_InitRequest(FCGX_Request *request); +DLLAPI int FCGX_InitRequest(FCGX_Request *request, int sock, int flags); /* *---------------------------------------------------------------------- * * FCGX_Accept_r -- * - * Accept a new request (multi-thread safe). Be sure to call + * Accept a new request (multi-thread safe). Be sure to call * FCGX_Init() first. * * Results: @@ -170,12 +204,7 @@ DLLAPI void FCGX_InitRequest(FCGX_Request *request); * *---------------------------------------------------------------------- */ -DLLAPI int FCGX_Accept_r( - FCGX_Stream **in, - FCGX_Stream **out, - FCGX_Stream **err, - FCGX_ParamArray *envp, - FCGX_Request *request); +DLLAPI int FCGX_Accept_r(FCGX_Request *request); /* *---------------------------------------------------------------------- @@ -201,6 +230,18 @@ DLLAPI void FCGX_Finish_r(FCGX_Request *request); /* *---------------------------------------------------------------------- * + * FCGX_Free -- + * + * Free the memory and, if close is true, + * IPC FD associated with the request (multi-thread safe). + * + *---------------------------------------------------------------------- + */ +DLLAPI void FCGX_Free(FCGX_Request * request, int close); + +/* + *---------------------------------------------------------------------- + * * FCGX_Accept -- * * Accept a new request (NOT multi-thread safe). @@ -265,7 +306,7 @@ DLLAPI void FCGX_Finish(void); * FCGX_CALL_SEQ_ERROR. * * Results: - * 0 for a normal return, < 0 for error + * 0 for a normal return, < 0 for error * *---------------------------------------------------------------------- */ @@ -415,7 +456,7 @@ DLLAPI int FCGX_HasSeenEOF(FCGX_Stream *stream); * * Results: * The byte, or EOF (-1) if an error occurred. - * + * *---------------------------------------------------------------------- */ DLLAPI int FCGX_PutChar(int c, FCGX_Stream *stream); @@ -432,7 +473,7 @@ DLLAPI int FCGX_PutChar(int c, FCGX_Stream *stream); * Results: * Number of bytes written (n) for normal return, * EOF (-1) if an error occurred. - * + * *---------------------------------------------------------------------- */ DLLAPI int FCGX_PutStr(const char *str, int n, FCGX_Stream *stream); @@ -447,7 +488,7 @@ DLLAPI int FCGX_PutStr(const char *str, int n, FCGX_Stream *stream); * Results: * number of bytes written for normal return, * EOF (-1) if an error occurred. - * + * *---------------------------------------------------------------------- */ DLLAPI int FCGX_PutS(const char *str, FCGX_Stream *stream); @@ -463,7 +504,7 @@ DLLAPI int FCGX_PutS(const char *str, FCGX_Stream *stream); * Results: * number of bytes written for normal return, * EOF (-1) if an error occurred. - * + * *---------------------------------------------------------------------- */ DLLAPI int FCGX_FPrintF(FCGX_Stream *stream, const char *format, ...); @@ -484,7 +525,7 @@ DLLAPI int FCGX_VFPrintF(FCGX_Stream *stream, const char *format, va_list arg); * * Results: * EOF (-1) if an error occurred. - * + * *---------------------------------------------------------------------- */ DLLAPI int FCGX_FFlush(FCGX_Stream *stream); @@ -510,7 +551,7 @@ DLLAPI int FCGX_FFlush(FCGX_Stream *stream); * * Results: * EOF (-1) if an error occurred. - * + * *---------------------------------------------------------------------- */ DLLAPI int FCGX_FClose(FCGX_Stream *stream); @@ -538,6 +579,34 @@ DLLAPI int FCGX_GetError(FCGX_Stream *stream); */ DLLAPI void FCGX_ClearError(FCGX_Stream *stream); +/* + *---------------------------------------------------------------------- + * + * FCGX_CreateWriter -- + * + * Create a FCGX_Stream (used by cgi-fcgi). This shouldn't + * be needed by a FastCGI applictaion. + * + *---------------------------------------------------------------------- + */ +DLLAPI FCGX_Stream *FCGX_CreateWriter( + int socket, + int requestId, + int bufflen, + int streamType); + +/* + *---------------------------------------------------------------------- + * + * FCGX_FreeStream -- + * + * Free a FCGX_Stream (used by cgi-fcgi). This shouldn't + * be needed by a FastCGI applictaion. + * + *---------------------------------------------------------------------- + */ +DLLAPI void FCGX_FreeStream(FCGX_Stream **stream); + #if defined (__cplusplus) || defined (c_plusplus) } /* terminate extern "C" { */