1*76404edcSAsim Jamshed /*
2*76404edcSAsim Jamshed  * fastcgi.h --
3*76404edcSAsim Jamshed  *
4*76404edcSAsim Jamshed  *	Defines for the FastCGI protocol.
5*76404edcSAsim Jamshed  *
6*76404edcSAsim Jamshed  *
7*76404edcSAsim Jamshed  * Copyright (c) 1995-1996 Open Market, Inc.
8*76404edcSAsim Jamshed  *
9*76404edcSAsim Jamshed  * See the file "LICENSE.TERMS" for information on usage and redistribution
10*76404edcSAsim Jamshed  * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
11*76404edcSAsim Jamshed  *
12*76404edcSAsim Jamshed  * $Id: fastcgi.h,v 1.1.1.1 2003/10/18 09:54:10 weigon Exp $
13*76404edcSAsim Jamshed  */
14*76404edcSAsim Jamshed 
15*76404edcSAsim Jamshed #ifndef _FASTCGI_H
16*76404edcSAsim Jamshed #define _FASTCGI_H
17*76404edcSAsim Jamshed 
18*76404edcSAsim Jamshed /*
19*76404edcSAsim Jamshed  * Listening socket file number
20*76404edcSAsim Jamshed  */
21*76404edcSAsim Jamshed #define FCGI_LISTENSOCK_FILENO 0
22*76404edcSAsim Jamshed 
23*76404edcSAsim Jamshed typedef struct {
24*76404edcSAsim Jamshed     unsigned char version;
25*76404edcSAsim Jamshed     unsigned char type;
26*76404edcSAsim Jamshed     unsigned char requestIdB1;
27*76404edcSAsim Jamshed     unsigned char requestIdB0;
28*76404edcSAsim Jamshed     unsigned char contentLengthB1;
29*76404edcSAsim Jamshed     unsigned char contentLengthB0;
30*76404edcSAsim Jamshed     unsigned char paddingLength;
31*76404edcSAsim Jamshed     unsigned char reserved;
32*76404edcSAsim Jamshed } FCGI_Header;
33*76404edcSAsim Jamshed 
34*76404edcSAsim Jamshed #define FCGI_MAX_LENGTH 0xffff
35*76404edcSAsim Jamshed 
36*76404edcSAsim Jamshed /*
37*76404edcSAsim Jamshed  * Number of bytes in a FCGI_Header.  Future versions of the protocol
38*76404edcSAsim Jamshed  * will not reduce this number.
39*76404edcSAsim Jamshed  */
40*76404edcSAsim Jamshed #define FCGI_HEADER_LEN  8
41*76404edcSAsim Jamshed 
42*76404edcSAsim Jamshed /*
43*76404edcSAsim Jamshed  * Value for version component of FCGI_Header
44*76404edcSAsim Jamshed  */
45*76404edcSAsim Jamshed #define FCGI_VERSION_1           1
46*76404edcSAsim Jamshed 
47*76404edcSAsim Jamshed /*
48*76404edcSAsim Jamshed  * Values for type component of FCGI_Header
49*76404edcSAsim Jamshed  */
50*76404edcSAsim Jamshed #define FCGI_BEGIN_REQUEST       1
51*76404edcSAsim Jamshed #define FCGI_ABORT_REQUEST       2
52*76404edcSAsim Jamshed #define FCGI_END_REQUEST         3
53*76404edcSAsim Jamshed #define FCGI_PARAMS              4
54*76404edcSAsim Jamshed #define FCGI_STDIN               5
55*76404edcSAsim Jamshed #define FCGI_STDOUT              6
56*76404edcSAsim Jamshed #define FCGI_STDERR              7
57*76404edcSAsim Jamshed #define FCGI_DATA                8
58*76404edcSAsim Jamshed #define FCGI_GET_VALUES          9
59*76404edcSAsim Jamshed #define FCGI_GET_VALUES_RESULT  10
60*76404edcSAsim Jamshed #define FCGI_UNKNOWN_TYPE       11
61*76404edcSAsim Jamshed #define FCGI_MAXTYPE (FCGI_UNKNOWN_TYPE)
62*76404edcSAsim Jamshed 
63*76404edcSAsim Jamshed /*
64*76404edcSAsim Jamshed  * Value for requestId component of FCGI_Header
65*76404edcSAsim Jamshed  */
66*76404edcSAsim Jamshed #define FCGI_NULL_REQUEST_ID     0
67*76404edcSAsim Jamshed 
68*76404edcSAsim Jamshed 
69*76404edcSAsim Jamshed typedef struct {
70*76404edcSAsim Jamshed     unsigned char roleB1;
71*76404edcSAsim Jamshed     unsigned char roleB0;
72*76404edcSAsim Jamshed     unsigned char flags;
73*76404edcSAsim Jamshed     unsigned char reserved[5];
74*76404edcSAsim Jamshed } FCGI_BeginRequestBody;
75*76404edcSAsim Jamshed 
76*76404edcSAsim Jamshed typedef struct {
77*76404edcSAsim Jamshed     FCGI_Header header;
78*76404edcSAsim Jamshed     FCGI_BeginRequestBody body;
79*76404edcSAsim Jamshed } FCGI_BeginRequestRecord;
80*76404edcSAsim Jamshed 
81*76404edcSAsim Jamshed /*
82*76404edcSAsim Jamshed  * Mask for flags component of FCGI_BeginRequestBody
83*76404edcSAsim Jamshed  */
84*76404edcSAsim Jamshed #define FCGI_KEEP_CONN  1
85*76404edcSAsim Jamshed 
86*76404edcSAsim Jamshed /*
87*76404edcSAsim Jamshed  * Values for role component of FCGI_BeginRequestBody
88*76404edcSAsim Jamshed  */
89*76404edcSAsim Jamshed #define FCGI_RESPONDER  1
90*76404edcSAsim Jamshed #define FCGI_AUTHORIZER 2
91*76404edcSAsim Jamshed #define FCGI_FILTER     3
92*76404edcSAsim Jamshed 
93*76404edcSAsim Jamshed 
94*76404edcSAsim Jamshed typedef struct {
95*76404edcSAsim Jamshed     unsigned char appStatusB3;
96*76404edcSAsim Jamshed     unsigned char appStatusB2;
97*76404edcSAsim Jamshed     unsigned char appStatusB1;
98*76404edcSAsim Jamshed     unsigned char appStatusB0;
99*76404edcSAsim Jamshed     unsigned char protocolStatus;
100*76404edcSAsim Jamshed     unsigned char reserved[3];
101*76404edcSAsim Jamshed } FCGI_EndRequestBody;
102*76404edcSAsim Jamshed 
103*76404edcSAsim Jamshed typedef struct {
104*76404edcSAsim Jamshed     FCGI_Header header;
105*76404edcSAsim Jamshed     FCGI_EndRequestBody body;
106*76404edcSAsim Jamshed } FCGI_EndRequestRecord;
107*76404edcSAsim Jamshed 
108*76404edcSAsim Jamshed /*
109*76404edcSAsim Jamshed  * Values for protocolStatus component of FCGI_EndRequestBody
110*76404edcSAsim Jamshed  */
111*76404edcSAsim Jamshed #define FCGI_REQUEST_COMPLETE 0
112*76404edcSAsim Jamshed #define FCGI_CANT_MPX_CONN    1
113*76404edcSAsim Jamshed #define FCGI_OVERLOADED       2
114*76404edcSAsim Jamshed #define FCGI_UNKNOWN_ROLE     3
115*76404edcSAsim Jamshed 
116*76404edcSAsim Jamshed 
117*76404edcSAsim Jamshed /*
118*76404edcSAsim Jamshed  * Variable names for FCGI_GET_VALUES / FCGI_GET_VALUES_RESULT records
119*76404edcSAsim Jamshed  */
120*76404edcSAsim Jamshed #define FCGI_MAX_CONNS  "FCGI_MAX_CONNS"
121*76404edcSAsim Jamshed #define FCGI_MAX_REQS   "FCGI_MAX_REQS"
122*76404edcSAsim Jamshed #define FCGI_MPXS_CONNS "FCGI_MPXS_CONNS"
123*76404edcSAsim Jamshed 
124*76404edcSAsim Jamshed 
125*76404edcSAsim Jamshed typedef struct {
126*76404edcSAsim Jamshed     unsigned char type;
127*76404edcSAsim Jamshed     unsigned char reserved[7];
128*76404edcSAsim Jamshed } FCGI_UnknownTypeBody;
129*76404edcSAsim Jamshed 
130*76404edcSAsim Jamshed typedef struct {
131*76404edcSAsim Jamshed     FCGI_Header header;
132*76404edcSAsim Jamshed     FCGI_UnknownTypeBody body;
133*76404edcSAsim Jamshed } FCGI_UnknownTypeRecord;
134*76404edcSAsim Jamshed 
135*76404edcSAsim Jamshed #endif	/* _FASTCGI_H */
136*76404edcSAsim Jamshed 
137