Annotation of embedaddon/php/sapi/litespeed/lsapilib.h, revision 1.1.1.2

1.1       misho       1: 
                      2: /*
                      3:    +----------------------------------------------------------------------+
                      4:    | PHP Version 5                                                        |
                      5:    +----------------------------------------------------------------------+
1.1.1.2 ! misho       6:    | Copyright (c) 1997-2013 The PHP Group                                |
1.1       misho       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>