Annotation of embedaddon/php/sapi/litespeed/lsapilib.h, revision 1.1.1.1
1.1 misho 1:
2: /*
3: +----------------------------------------------------------------------+
4: | PHP Version 5 |
5: +----------------------------------------------------------------------+
6: | Copyright (c) 1997-2007 The PHP Group |
7: +----------------------------------------------------------------------+
8: | This source file is subject to version 3.01 of the PHP license, |
9: | that is bundled with this package in the file LICENSE, and is |
10: | available at through the world-wide-web at the following url: |
11: | http://www.php.net/license/3_01.txt. |
12: | If you did not receive a copy of the PHP license and are unable to |
13: | obtain it through the world-wide-web, please send a note to |
14: | license@php.net so we can mail you a copy immediately. |
15: +----------------------------------------------------------------------+
16: | Author: George Wang <gwang@litespeedtech.com> |
17: +----------------------------------------------------------------------+
18: */
19:
20: /*
21: Copyright (c) 2007, Lite Speed Technologies Inc.
22: All rights reserved.
23:
24: Redistribution and use in source and binary forms, with or without
25: modification, are permitted provided that the following conditions are
26: met:
27:
28: * Redistributions of source code must retain the above copyright
29: notice, this list of conditions and the following disclaimer.
30: * Redistributions in binary form must reproduce the above
31: copyright notice, this list of conditions and the following
32: disclaimer in the documentation and/or other materials provided
33: with the distribution.
34: * Neither the name of the Lite Speed Technologies Inc nor the
35: names of its contributors may be used to endorse or promote
36: products derived from this software without specific prior
37: written permission.
38:
39: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
40: "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
41: LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
42: A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
43: OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
45: LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
46: DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
47: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
48: (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
49: OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
50: */
51:
52:
53:
54: #ifndef _LSAPILIB_H_
55: #define _LSAPILIB_H_
56:
57: #if defined (c_plusplus) || defined (__cplusplus)
58: extern "C" {
59: #endif
60:
61: #include <stddef.h>
62: #include <lsapidef.h>
63:
64: #include <sys/time.h>
65: #include <sys/types.h>
66:
67: struct LSAPI_key_value_pair
68: {
69: char * pKey;
70: char * pValue;
71: int keyLen;
72: int valLen;
73: };
74:
75:
76: #define LSAPI_MAX_RESP_HEADERS 100
77:
78: typedef struct lsapi_request
79: {
80: int m_fdListen;
81: int m_fd;
82:
83: long m_lLastActive;
84: long m_lReqBegin;
85:
86: char * m_pReqBuf;
87: int m_reqBufSize;
88:
89: char * m_pRespBuf;
90: char * m_pRespBufEnd;
91: char * m_pRespBufPos;
92:
93: char * m_pRespHeaderBuf;
94: char * m_pRespHeaderBufEnd;
95: char * m_pRespHeaderBufPos;
96:
97:
98: struct iovec * m_pIovec;
99: struct iovec * m_pIovecEnd;
100: struct iovec * m_pIovecCur;
101: struct iovec * m_pIovecToWrite;
102:
103: struct lsapi_packet_header * m_respPktHeaderEnd;
104:
105: struct lsapi_req_header * m_pHeader;
106: struct LSAPI_key_value_pair * m_pEnvList;
107: struct LSAPI_key_value_pair * m_pSpecialEnvList;
108: int m_envListSize;
109: int m_specialEnvListSize;
110:
111: struct lsapi_http_header_index * m_pHeaderIndex;
112: struct lsapi_header_offset * m_pUnknownHeader;
113:
114: char * m_pScriptFile;
115: char * m_pScriptName;
116: char * m_pQueryString;
117: char * m_pHttpHeader;
118: char * m_pRequestMethod;
119: int m_totalLen;
120: int m_reqState;
121: int m_reqBodyRead;
122: int m_bufProcessed;
123: int m_bufRead;
124:
125: struct lsapi_packet_header m_respPktHeader[5];
126:
127: struct lsapi_resp_header m_respHeader;
128: short m_respHeaderLen[LSAPI_MAX_RESP_HEADERS];
129:
130: }LSAPI_Request;
131:
132: extern LSAPI_Request g_req;
133:
134:
135: /* return: >0 continue, ==0 stop, -1 failed */
136: typedef int (*LSAPI_CB_EnvHandler )( const char * pKey, int keyLen,
137: const char * pValue, int valLen, void * arg );
138:
139:
140: int LSAPI_Init(void);
141:
142: void LSAPI_Stop(void);
143:
144: int LSAPI_Is_Listen_r( LSAPI_Request * pReq);
145:
146: int LSAPI_InitRequest( LSAPI_Request * pReq, int fd );
147:
148: int LSAPI_Accept_r( LSAPI_Request * pReq );
149:
150: void LSAPI_Reset_r( LSAPI_Request * pReq );
151:
152: int LSAPI_Finish_r( LSAPI_Request * pReq );
153:
154: int LSAPI_Release_r( LSAPI_Request * pReq );
155:
156: char * LSAPI_GetHeader_r( LSAPI_Request * pReq, int headerIndex );
157:
158: int LSAPI_ForeachHeader_r( LSAPI_Request * pReq,
159: LSAPI_CB_EnvHandler fn, void * arg );
160:
161: int LSAPI_ForeachOrgHeader_r( LSAPI_Request * pReq,
162: LSAPI_CB_EnvHandler fn, void * arg );
163:
164: int LSAPI_ForeachEnv_r( LSAPI_Request * pReq,
165: LSAPI_CB_EnvHandler fn, void * arg );
166:
167: int LSAPI_ForeachSpecialEnv_r( LSAPI_Request * pReq,
168: LSAPI_CB_EnvHandler fn, void * arg );
169:
170: char * LSAPI_GetEnv_r( LSAPI_Request * pReq, const char * name );
171:
172:
173: int LSAPI_ReadReqBody_r( LSAPI_Request * pReq, char * pBuf, int len );
174:
175: int LSAPI_ReqBodyGetChar_r( LSAPI_Request * pReq );
176:
177: int LSAPI_ReqBodyGetLine_r( LSAPI_Request * pReq, char * pBuf, int bufLen, int *getLF );
178:
179:
180: int LSAPI_FinalizeRespHeaders_r( LSAPI_Request * pReq );
181:
182: int LSAPI_Write_r( LSAPI_Request * pReq, const char * pBuf, int len );
183:
184: int LSAPI_Write_Stderr_r( LSAPI_Request * pReq, const char * pBuf, int len );
185:
186: int LSAPI_Flush_r( LSAPI_Request * pReq );
187:
188: int LSAPI_AppendRespHeader_r( LSAPI_Request * pHeader, char * pBuf, int len );
189:
190: static inline int LSAPI_SetRespStatus_r( LSAPI_Request * pReq, int code )
191: {
192: if ( !pReq )
193: return -1;
194: pReq->m_respHeader.m_respInfo.m_status = code;
195: return 0;
196: }
197:
198: static inline char * LSAPI_GetQueryString_r( LSAPI_Request * pReq )
199: {
200: if ( pReq )
201: return pReq->m_pQueryString;
202: return NULL;
203: }
204:
205:
206: static inline char * LSAPI_GetScriptFileName_r( LSAPI_Request * pReq )
207: {
208: if ( pReq )
209: return pReq->m_pScriptFile;
210: return NULL;
211: }
212:
213:
214: static inline char * LSAPI_GetScriptName_r( LSAPI_Request * pReq )
215: {
216: if ( pReq )
217: return pReq->m_pScriptName;
218: return NULL;
219: }
220:
221:
222: static inline char * LSAPI_GetRequestMethod_r( LSAPI_Request * pReq)
223: {
224: if ( pReq )
225: return pReq->m_pRequestMethod;
226: return NULL;
227: }
228:
229:
230:
231: static inline int LSAPI_GetReqBodyLen_r( LSAPI_Request * pReq )
232: {
233: if ( pReq )
234: return pReq->m_pHeader->m_reqBodyLen;
235: return -1;
236: }
237:
238: static inline int LSAPI_GetReqBodyRemain_r( LSAPI_Request * pReq )
239: {
240: if ( pReq )
241: return pReq->m_pHeader->m_reqBodyLen - pReq->m_reqBodyRead;
242: return -1;
243: }
244:
245:
246: int LSAPI_Is_Listen(void);
247:
248: static inline int LSAPI_Accept( void )
249: { return LSAPI_Accept_r( &g_req ); }
250:
251: static inline int LSAPI_Finish(void)
252: { return LSAPI_Finish_r( &g_req ); }
253:
254: static inline char * LSAPI_GetHeader( int headerIndex )
255: { return LSAPI_GetHeader_r( &g_req, headerIndex ); }
256:
257: static inline int LSAPI_ForeachHeader( LSAPI_CB_EnvHandler fn, void * arg )
258: { return LSAPI_ForeachHeader_r( &g_req, fn, arg ); }
259:
260: static inline int LSAPI_ForeachOrgHeader(
261: LSAPI_CB_EnvHandler fn, void * arg )
262: { return LSAPI_ForeachOrgHeader_r( &g_req, fn, arg ); }
263:
264: static inline int LSAPI_ForeachEnv( LSAPI_CB_EnvHandler fn, void * arg )
265: { return LSAPI_ForeachEnv_r( &g_req, fn, arg ); }
266:
267: static inline int LSAPI_ForeachSpecialEnv( LSAPI_CB_EnvHandler fn, void * arg )
268: { return LSAPI_ForeachSpecialEnv_r( &g_req, fn, arg ); }
269:
270: static inline char * LSAPI_GetEnv( const char * name )
271: { return LSAPI_GetEnv_r( &g_req, name ); }
272:
273: static inline char * LSAPI_GetQueryString()
274: { return LSAPI_GetQueryString_r( &g_req ); }
275:
276: static inline char * LSAPI_GetScriptFileName()
277: { return LSAPI_GetScriptFileName_r( &g_req ); }
278:
279: static inline char * LSAPI_GetScriptName()
280: { return LSAPI_GetScriptName_r( &g_req ); }
281:
282: static inline char * LSAPI_GetRequestMethod()
283: { return LSAPI_GetRequestMethod_r( &g_req ); }
284:
285: static inline int LSAPI_GetReqBodyLen()
286: { return LSAPI_GetReqBodyLen_r( &g_req ); }
287:
288: static inline int LSAPI_GetReqBodyRemain()
289: { return LSAPI_GetReqBodyRemain_r( &g_req ); }
290:
291: static inline int LSAPI_ReadReqBody( char * pBuf, int len )
292: { return LSAPI_ReadReqBody_r( &g_req, pBuf, len ); }
293:
294: static inline int LSAPI_ReqBodyGetChar()
295: { return LSAPI_ReqBodyGetChar_r( &g_req ); }
296:
297: static inline int LSAPI_ReqBodyGetLine( char * pBuf, int len, int *getLF )
298: { return LSAPI_ReqBodyGetLine_r( &g_req, pBuf, len, getLF ); }
299:
300:
301:
302: static inline int LSAPI_FinalizeRespHeaders(void)
303: { return LSAPI_FinalizeRespHeaders_r( &g_req ); }
304:
305: static inline int LSAPI_Write( const char * pBuf, int len )
306: { return LSAPI_Write_r( &g_req, pBuf, len ); }
307:
308: static inline int LSAPI_Write_Stderr( const char * pBuf, int len )
309: { return LSAPI_Write_Stderr_r( &g_req, pBuf, len ); }
310:
311: static inline int LSAPI_Flush()
312: { return LSAPI_Flush_r( &g_req ); }
313:
314: static inline int LSAPI_AppendRespHeader( char * pBuf, int len )
315: { return LSAPI_AppendRespHeader_r( &g_req, pBuf, len ); }
316:
317: static inline int LSAPI_SetRespStatus( int code )
318: { return LSAPI_SetRespStatus_r( &g_req, code ); }
319:
320: int LSAPI_IsRunning(void);
321:
322: int LSAPI_CreateListenSock( const char * pBind, int backlog );
323:
324: typedef int (*fn_select_t)( int, fd_set *, fd_set *, fd_set *, struct timeval * );
325:
326: int LSAPI_Init_Prefork_Server( int max_children, fn_select_t fp, int avoidFork );
327:
328: void LSAPI_Set_Server_fd( int fd );
329:
330: int LSAPI_Prefork_Accept_r( LSAPI_Request * pReq );
331:
332: void LSAPI_Set_Max_Reqs( int reqs );
333:
334: void LSAPI_Set_Max_Idle( int secs );
335:
336: void LSAPI_Set_Max_Children( int maxChildren );
337:
338: void LSAPI_Set_Max_Idle_Children( int maxIdleChld );
339:
340: void LSAPI_Set_Server_Max_Idle_Secs( int serverMaxIdle );
341:
342: void LSAPI_Set_Max_Process_Time( int secs );
343:
344: void LSAPI_Init_Env_Parameters( fn_select_t fp );
345:
346: void LSAPI_Set_Slow_Req_Msecs( int msecs );
347:
348: int LSAPI_Get_Slow_Req_Msecs( );
349:
350:
351: #if defined (c_plusplus) || defined (__cplusplus)
352: }
353: #endif
354:
355:
356: #endif
357:
358:
359:
360:
361:
362:
363:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>