Lines Matching refs:pReq

134 void Flush_RespBuf_r( LSAPI_Request * pReq );
378 static inline int allocateBuf( LSAPI_Request * pReq, int size ) in allocateBuf() argument
380 char * pBuf = (char *)realloc( pReq->m_pReqBuf, size ); in allocateBuf()
383 pReq->m_pReqBuf = pBuf; in allocateBuf()
384 pReq->m_reqBufSize = size; in allocateBuf()
385 pReq->m_pHeader = (struct lsapi_req_header *)pReq->m_pReqBuf; in allocateBuf()
392 static int allocateIovec( LSAPI_Request * pReq, int n ) in allocateIovec() argument
395 pReq->m_pIovec, sizeof(struct iovec) * n ); in allocateIovec()
398 pReq->m_pIovecToWrite = p + ( pReq->m_pIovecToWrite - pReq->m_pIovec ); in allocateIovec()
399 pReq->m_pIovecCur = p + ( pReq->m_pIovecCur - pReq->m_pIovec ); in allocateIovec()
400 pReq->m_pIovec = p; in allocateIovec()
401 pReq->m_pIovecEnd = p + n; in allocateIovec()
405 static int allocateRespHeaderBuf( LSAPI_Request * pReq, int size ) in allocateRespHeaderBuf() argument
407 char * p = (char *)realloc( pReq->m_pRespHeaderBuf, size ); in allocateRespHeaderBuf()
410 pReq->m_pRespHeaderBufPos = p + ( pReq->m_pRespHeaderBufPos - pReq->m_pRespHeaderBuf ); in allocateRespHeaderBuf()
411 pReq->m_pRespHeaderBuf = p; in allocateRespHeaderBuf()
412 pReq->m_pRespHeaderBufEnd = p + size; in allocateRespHeaderBuf()
517 static inline void fixEndian( LSAPI_Request * pReq ) in fixEndian() argument
519 struct lsapi_req_header *p= pReq->m_pHeader; in fixEndian()
531 static void fixHeaderIndexEndian( LSAPI_Request * pReq ) in fixHeaderIndexEndian() argument
536 if ( pReq->m_pHeaderIndex->m_headerOff[i] ) in fixHeaderIndexEndian()
539 char * p = (char *)(&pReq->m_pHeaderIndex->m_headerLen[i]); in fixHeaderIndexEndian()
543 swapIntEndian( &pReq->m_pHeaderIndex->m_headerOff[i] ); in fixHeaderIndexEndian()
546 if ( pReq->m_pHeader->m_cntUnknownHeaders > 0 ) in fixHeaderIndexEndian()
549 pCur = pReq->m_pUnknownHeader; in fixHeaderIndexEndian()
550 pEnd = pCur + pReq->m_pHeader->m_cntUnknownHeaders; in fixHeaderIndexEndian()
691 static int LSAPI_perror_r( LSAPI_Request * pReq, const char * pErr1, const char *pErr2 ) in LSAPI_perror_r() argument
695 if ( pReq ) in LSAPI_perror_r()
696 LSAPI_Write_Stderr_r( pReq, achError, n ); in LSAPI_perror_r()
702 static int lsapi_lve_error( LSAPI_Request * pReq ) in lsapi_lve_error() argument
721 LSAPI_ErrResponse_r( pReq, 508, headers, achBody, sizeof( achBody ) - 1 ); in lsapi_lve_error()
725 static int lsapi_enterLVE( LSAPI_Request * pReq, uid_t uid ) in lsapi_enterLVE() argument
736 LSAPI_perror_r(pReq, "LSAPI: lve_enter() failure, reached resource limit.", NULL ); in lsapi_enterLVE()
737 lsapi_lve_error( pReq ); in lsapi_enterLVE()
746 static int lsapi_jailLVE( LSAPI_Request * pReq, uid_t uid, struct passwd * pw ) in lsapi_jailLVE() argument
756 LSAPI_perror_r( pReq, "LSAPI: jail() failure.", NULL ); in lsapi_jailLVE()
792 static int setUID_LVE(LSAPI_Request * pReq, uid_t uid, gid_t gid, const char * pChroot) in setUID_LVE() argument
800 if( lsapi_enterLVE( pReq, uid ) == -1 ) in setUID_LVE()
804 rv = lsapi_jailLVE( pReq, uid, pw ); in setUID_LVE()
830 LSAPI_perror_r(pReq, "LSAPI: setgid()", NULL); in setUID_LVE()
838 LSAPI_perror_r(pReq, "LSAPI: initgroups()", NULL); in setUID_LVE()
847 LSAPI_perror_r(pReq, "LSAPI: setgroups()", NULL); in setUID_LVE()
855 LSAPI_perror_r(pReq, "LSAPI: chroot()", NULL); in setUID_LVE()
862 LSAPI_perror_r(pReq, "LSAPI: setuid()", NULL); in setUID_LVE()
872 static int lsapi_suexec_auth( LSAPI_Request *pReq, in lsapi_suexec_auth() argument
891 static int lsapi_changeUGid( LSAPI_Request * pReq ) in lsapi_changeUGid() argument
906 i = pReq->m_pHeader->m_cntSpecialEnv - 1; in lsapi_changeUGid()
909 pEnv = pReq->m_pSpecialEnvList + i; in lsapi_changeUGid()
913 --pReq->m_pHeader->m_cntSpecialEnv; in lsapi_changeUGid()
918 --pReq->m_pHeader->m_cntSpecialEnv; in lsapi_changeUGid()
928 …if ( pEnv&& lsapi_suexec_auth( pReq, pAuth->pValue, pAuth->valLen, pEnv->pValue, pEnv->valLen ) ==… in lsapi_changeUGid()
954 if ( setUID_LVE( pReq, uid, gid, pChroot ) == -1 ) in lsapi_changeUGid()
965 static int parseContentLenFromHeader(LSAPI_Request * pReq) in parseContentLenFromHeader() argument
967 const char * pContentLen = LSAPI_GetHeader_r( pReq, H_CONTENT_LENGTH ); in parseContentLenFromHeader()
969 pReq->m_reqBodyLen = strtoll( pContentLen, NULL, 10 ); in parseContentLenFromHeader()
974 static int parseRequest( LSAPI_Request * pReq, int totalLen ) in parseRequest() argument
977 char * pBegin = pReq->m_pReqBuf + sizeof( struct lsapi_req_header ); in parseRequest()
978 char * pEnd = pReq->m_pReqBuf + totalLen; in parseRequest()
980 pReq->m_pHeader->m_pktHeader.m_flag & LSAPI_ENDIAN_BIT ) ); in parseRequest()
983 fixEndian( pReq ); in parseRequest()
985 if ( (pReq->m_specialEnvListSize < pReq->m_pHeader->m_cntSpecialEnv )&& in parseRequest()
986 allocateEnvList( &pReq->m_pSpecialEnvList, in parseRequest()
987 &pReq->m_specialEnvListSize, in parseRequest()
988 pReq->m_pHeader->m_cntSpecialEnv ) == -1 ) in parseRequest()
990 if ( (pReq->m_envListSize < pReq->m_pHeader->m_cntEnv )&& in parseRequest()
991 allocateEnvList( &pReq->m_pEnvList, &pReq->m_envListSize, in parseRequest()
992 pReq->m_pHeader->m_cntEnv ) == -1 ) in parseRequest()
995 if ( parseEnv( pReq->m_pSpecialEnvList, in parseRequest()
996 pReq->m_pHeader->m_cntSpecialEnv, in parseRequest()
999 if ( parseEnv( pReq->m_pEnvList, pReq->m_pHeader->m_cntEnv, in parseRequest()
1003 pReq->m_pScriptFile = pReq->m_pReqBuf + pReq->m_pHeader->m_scriptFileOff; in parseRequest()
1004 pReq->m_pScriptName = pReq->m_pReqBuf + pReq->m_pHeader->m_scriptNameOff; in parseRequest()
1005 pReq->m_pQueryString = pReq->m_pReqBuf + pReq->m_pHeader->m_queryStringOff; in parseRequest()
1006 pReq->m_pRequestMethod = pReq->m_pReqBuf + pReq->m_pHeader->m_requestMethodOff; in parseRequest()
1008 pBegin = pReq->m_pReqBuf + (( pBegin - pReq->m_pReqBuf + 7 ) & (~0x7)); in parseRequest()
1009 pReq->m_pHeaderIndex = ( struct lsapi_http_header_index * )pBegin; in parseRequest()
1012 pReq->m_pUnknownHeader = (struct lsapi_header_offset *)pBegin; in parseRequest()
1014 pReq->m_pHeader->m_cntUnknownHeaders; in parseRequest()
1016 pReq->m_pHttpHeader = pBegin; in parseRequest()
1017 pBegin += pReq->m_pHeader->m_httpHeaderLen; in parseRequest()
1021 pBegin - pReq->m_pReqBuf ); in parseRequest()
1026 fixHeaderIndexEndian( pReq ); in parseRequest()
1028 pReq->m_reqBodyLen = pReq->m_pHeader->m_reqBodyLen; in parseRequest()
1029 if ( pReq->m_reqBodyLen == -2 ) in parseRequest()
1031 parseContentLenFromHeader(pReq); in parseRequest()
1119 static int readReq( LSAPI_Request * pReq ) in readReq() argument
1123 if ( !pReq ) in readReq()
1125 if ( pReq->m_reqBufSize < 8192 ) in readReq()
1127 if ( allocateBuf( pReq, 8192 ) == -1 ) in readReq()
1131 while ( pReq->m_bufRead < LSAPI_PACKET_HEADER_LEN ) in readReq()
1133 len = lsapi_read( pReq->m_fd, pReq->m_pReqBuf, pReq->m_reqBufSize ); in readReq()
1136 pReq->m_bufRead += len; in readReq()
1138 pReq->m_reqState = LSAPI_ST_REQ_HEADER; in readReq()
1140 packetLen = verifyHeader( &pReq->m_pHeader->m_pktHeader, LSAPI_BEGIN_REQUEST ); in readReq()
1152 if ( packetLen + 1024 > pReq->m_reqBufSize ) in readReq()
1154 if ( allocateBuf( pReq, packetLen + 1024 ) == -1 ) in readReq()
1157 while( packetLen > pReq->m_bufRead ) in readReq()
1159 … len = lsapi_read( pReq->m_fd, pReq->m_pReqBuf + pReq->m_bufRead, packetLen - pReq->m_bufRead ); in readReq()
1162 pReq->m_bufRead += len; in readReq()
1164 if ( parseRequest( pReq, packetLen ) < 0 ) in readReq()
1170 pReq->m_reqState = LSAPI_ST_REQ_BODY | LSAPI_ST_RESP_HEADER; in readReq()
1173 if ( lsapi_changeUGid( pReq ) ) in readReq()
1175 pReq->m_bufProcessed = packetLen; in readReq()
1179 return notify_req_received( pReq->m_fd ); in readReq()
1222 int LSAPI_InitRequest( LSAPI_Request * pReq, int fd ) in LSAPI_InitRequest() argument
1225 if ( !pReq ) in LSAPI_InitRequest()
1227 memset( pReq, 0, sizeof( LSAPI_Request ) ); in LSAPI_InitRequest()
1228 if ( allocateIovec( pReq, 16 ) == -1 ) in LSAPI_InitRequest()
1230 pReq->m_pRespBuf = pReq->m_pRespBufPos = (char *)malloc( LSAPI_RESP_BUF_SIZE ); in LSAPI_InitRequest()
1231 if ( !pReq->m_pRespBuf ) in LSAPI_InitRequest()
1233 pReq->m_pRespBufEnd = pReq->m_pRespBuf + LSAPI_RESP_BUF_SIZE; in LSAPI_InitRequest()
1234 pReq->m_pIovecCur = pReq->m_pIovecToWrite = pReq->m_pIovec + 1; in LSAPI_InitRequest()
1235 pReq->m_respPktHeaderEnd = &pReq->m_respPktHeader[5]; in LSAPI_InitRequest()
1236 if ( allocateRespHeaderBuf( pReq, LSAPI_INIT_RESP_HEADER_LEN ) == -1 ) in LSAPI_InitRequest()
1248 pReq->m_fdListen = -1; in LSAPI_InitRequest()
1249 pReq->m_fd = fd; in LSAPI_InitRequest()
1253 pReq->m_fdListen = fd; in LSAPI_InitRequest()
1254 pReq->m_fd = -1; in LSAPI_InitRequest()
1265 int LSAPI_Is_Listen_r( LSAPI_Request * pReq) in LSAPI_Is_Listen_r() argument
1267 return pReq->m_fdListen != -1; in LSAPI_Is_Listen_r()
1272 int LSAPI_Accept_r( LSAPI_Request * pReq ) in LSAPI_Accept_r() argument
1278 if ( !pReq ) in LSAPI_Accept_r()
1280 if ( LSAPI_Finish_r( pReq ) == -1 ) in LSAPI_Accept_r()
1282 lsapi_set_nblock( pReq->m_fdListen , 0 ); in LSAPI_Accept_r()
1285 if ( pReq->m_fd == -1 ) in LSAPI_Accept_r()
1287 if ( pReq->m_fdListen != -1) in LSAPI_Accept_r()
1290 pReq->m_fd = accept( pReq->m_fdListen, in LSAPI_Accept_r()
1292 if ( pReq->m_fd == -1 ) in LSAPI_Accept_r()
1301 lsapi_set_nblock( pReq->m_fd , 0 ); in LSAPI_Accept_r()
1304 setsockopt(pReq->m_fd, IPPROTO_TCP, TCP_NODELAY, in LSAPI_Accept_r()
1310 if ( notify_req_received( pReq->m_fd ) == -1 ) in LSAPI_Accept_r()
1317 if ( !readReq( pReq ) ) in LSAPI_Accept_r()
1320 lsapi_close( pReq->m_fd ); in LSAPI_Accept_r()
1321 pReq->m_fd = -1; in LSAPI_Accept_r()
1322 LSAPI_Reset_r( pReq ); in LSAPI_Accept_r()
1330 int LSAPI_Finish_r( LSAPI_Request * pReq ) in LSAPI_Finish_r() argument
1333 if ( !pReq ) in LSAPI_Finish_r()
1335 if (pReq->m_reqState) in LSAPI_Finish_r()
1337 if ( pReq->m_fd != -1 ) in LSAPI_Finish_r()
1339 if ( pReq->m_reqState & LSAPI_ST_RESP_HEADER ) in LSAPI_Finish_r()
1341 LSAPI_FinalizeRespHeaders_r( pReq ); in LSAPI_Finish_r()
1343 if ( pReq->m_pRespBufPos != pReq->m_pRespBuf ) in LSAPI_Finish_r()
1345 Flush_RespBuf_r( pReq ); in LSAPI_Finish_r()
1348 pReq->m_pIovecCur->iov_base = (void *)&finish; in LSAPI_Finish_r()
1349 pReq->m_pIovecCur->iov_len = LSAPI_PACKET_HEADER_LEN; in LSAPI_Finish_r()
1350 pReq->m_totalLen += LSAPI_PACKET_HEADER_LEN; in LSAPI_Finish_r()
1351 ++pReq->m_pIovecCur; in LSAPI_Finish_r()
1352 LSAPI_Flush_r( pReq ); in LSAPI_Finish_r()
1354 LSAPI_Reset_r( pReq ); in LSAPI_Finish_r()
1360 void LSAPI_Reset_r( LSAPI_Request * pReq ) in LSAPI_Reset_r() argument
1362 pReq->m_pRespBufPos = pReq->m_pRespBuf; in LSAPI_Reset_r()
1363 pReq->m_pIovecCur = pReq->m_pIovecToWrite = pReq->m_pIovec + 1; in LSAPI_Reset_r()
1364 pReq->m_pRespHeaderBufPos = pReq->m_pRespHeaderBuf; in LSAPI_Reset_r()
1366 memset( &pReq->m_pHeaderIndex, 0, in LSAPI_Reset_r()
1367 (char *)(pReq->m_respHeaderLen) - (char *)&pReq->m_pHeaderIndex ); in LSAPI_Reset_r()
1371 int LSAPI_Release_r( LSAPI_Request * pReq ) in LSAPI_Release_r() argument
1373 if ( pReq->m_pReqBuf ) in LSAPI_Release_r()
1374 free( pReq->m_pReqBuf ); in LSAPI_Release_r()
1375 if ( pReq->m_pSpecialEnvList ) in LSAPI_Release_r()
1376 free( pReq->m_pSpecialEnvList ); in LSAPI_Release_r()
1377 if ( pReq->m_pEnvList ) in LSAPI_Release_r()
1378 free( pReq->m_pEnvList ); in LSAPI_Release_r()
1379 if ( pReq->m_pRespHeaderBuf ) in LSAPI_Release_r()
1380 free( pReq->m_pRespHeaderBuf ); in LSAPI_Release_r()
1385 char * LSAPI_GetHeader_r( LSAPI_Request * pReq, int headerIndex ) in LSAPI_GetHeader_r() argument
1388 if ( !pReq || ((unsigned int)headerIndex > H_TRANSFER_ENCODING) ) in LSAPI_GetHeader_r()
1390 off = pReq->m_pHeaderIndex->m_headerOff[ headerIndex ]; in LSAPI_GetHeader_r()
1393 if ( *(pReq->m_pHttpHeader + off in LSAPI_GetHeader_r()
1394 + pReq->m_pHeaderIndex->m_headerLen[ headerIndex ]) ) in LSAPI_GetHeader_r()
1396 *( pReq->m_pHttpHeader + off in LSAPI_GetHeader_r()
1397 + pReq->m_pHeaderIndex->m_headerLen[ headerIndex ]) = 0; in LSAPI_GetHeader_r()
1399 return pReq->m_pHttpHeader + off; in LSAPI_GetHeader_r()
1402 static int readBodyToReqBuf( LSAPI_Request * pReq ) in readBodyToReqBuf() argument
1405 ssize_t len = pReq->m_bufRead - pReq->m_bufProcessed; in readBodyToReqBuf()
1408 pReq->m_bufRead = pReq->m_bufProcessed = pReq->m_pHeader->m_pktHeader.m_packetLen.m_iLen; in readBodyToReqBuf()
1410 bodyLeft = pReq->m_reqBodyLen - pReq->m_reqBodyRead; in readBodyToReqBuf()
1411 len = pReq->m_reqBufSize - pReq->m_bufRead; in readBodyToReqBuf()
1417 len = lsapi_read( pReq->m_fd, pReq->m_pReqBuf + pReq->m_bufRead, len ); in readBodyToReqBuf()
1419 pReq->m_bufRead += len; in readBodyToReqBuf()
1424 int LSAPI_ReqBodyGetChar_r( LSAPI_Request * pReq ) in LSAPI_ReqBodyGetChar_r() argument
1426 if (!pReq || (pReq->m_fd ==-1) ) in LSAPI_ReqBodyGetChar_r()
1428 if ( pReq->m_bufProcessed >= pReq->m_bufRead ) in LSAPI_ReqBodyGetChar_r()
1430 if ( readBodyToReqBuf( pReq ) <= 0 ) in LSAPI_ReqBodyGetChar_r()
1433 ++pReq->m_reqBodyRead; in LSAPI_ReqBodyGetChar_r()
1434 return (unsigned char)*(pReq->m_pReqBuf + pReq->m_bufProcessed++); in LSAPI_ReqBodyGetChar_r()
1439 int LSAPI_ReqBodyGetLine_r( LSAPI_Request * pReq, char * pBuf, size_t bufLen, int *getLF ) in LSAPI_ReqBodyGetLine_r() argument
1447 if (!pReq || (pReq->m_fd ==-1) ||( !pBuf )||(bufLen < 0 )|| !getLF ) in LSAPI_ReqBodyGetLine_r()
1453 len = pReq->m_bufRead - pReq->m_bufProcessed; in LSAPI_ReqBodyGetLine_r()
1456 if ( (len = readBodyToReqBuf( pReq )) <= 0 ) in LSAPI_ReqBodyGetLine_r()
1464 pCur = pReq->m_pReqBuf + pReq->m_bufProcessed; in LSAPI_ReqBodyGetLine_r()
1470 pReq->m_bufProcessed += len; in LSAPI_ReqBodyGetLine_r()
1472 pReq->m_reqBodyRead += len; in LSAPI_ReqBodyGetLine_r()
1486 ssize_t LSAPI_ReadReqBody_r( LSAPI_Request * pReq, char * pBuf, size_t bufLen ) in LSAPI_ReadReqBody_r() argument
1491 if (!pReq || (pReq->m_fd ==-1) || ( !pBuf )||(bufLen < 0 )) in LSAPI_ReadReqBody_r()
1494 total = pReq->m_reqBodyLen - pReq->m_reqBodyRead; in LSAPI_ReadReqBody_r()
1502 len = pReq->m_bufRead - pReq->m_bufProcessed; in LSAPI_ReadReqBody_r()
1507 memmove( pBuf, pReq->m_pReqBuf + pReq->m_bufProcessed, len ); in LSAPI_ReadReqBody_r()
1508 pReq->m_bufProcessed += len; in LSAPI_ReadReqBody_r()
1515 len = lsapi_read( pReq->m_fd, pBuf, bufLen ); in LSAPI_ReadReqBody_r()
1529 pReq->m_reqBodyRead += total; in LSAPI_ReadReqBody_r()
1535 ssize_t LSAPI_Write_r( LSAPI_Request * pReq, const char * pBuf, size_t len ) in LSAPI_Write_r() argument
1545 if ( !pReq || !pBuf || (pReq->m_fd == -1) ) in LSAPI_Write_r()
1547 if ( pReq->m_reqState & LSAPI_ST_RESP_HEADER ) in LSAPI_Write_r()
1549 LSAPI_FinalizeRespHeaders_r( pReq ); in LSAPI_Write_r()
1561 pReq->m_reqState |= LSAPI_ST_RESP_BODY; in LSAPI_Write_r()
1563 if ( (len - skip) < pReq->m_pRespBufEnd - pReq->m_pRespBufPos ) in LSAPI_Write_r()
1565 memmove( pReq->m_pRespBufPos, pBuf + skip, len - skip ); in LSAPI_Write_r()
1566 pReq->m_pRespBufPos += len - skip; in LSAPI_Write_r()
1571 pHeader = pReq->m_respPktHeader; in LSAPI_Write_r()
1574 bufLen = pReq->m_pRespBufPos - pReq->m_pRespBuf; in LSAPI_Write_r()
1587 pReq->m_totalLen += packetLen + LSAPI_PACKET_HEADER_LEN; in LSAPI_Write_r()
1589 pReq->m_pIovecCur->iov_base = (void *)pHeader; in LSAPI_Write_r()
1590 pReq->m_pIovecCur->iov_len = LSAPI_PACKET_HEADER_LEN; in LSAPI_Write_r()
1591 ++pReq->m_pIovecCur; in LSAPI_Write_r()
1595 pReq->m_pIovecCur->iov_base = (void *)pReq->m_pRespBuf; in LSAPI_Write_r()
1596 pReq->m_pIovecCur->iov_len = bufLen; in LSAPI_Write_r()
1597 pReq->m_pRespBufPos = pReq->m_pRespBuf; in LSAPI_Write_r()
1598 ++pReq->m_pIovecCur; in LSAPI_Write_r()
1602 pReq->m_pIovecCur->iov_base = (void *)p; in LSAPI_Write_r()
1603 pReq->m_pIovecCur->iov_len = toWrite; in LSAPI_Write_r()
1604 ++pReq->m_pIovecCur; in LSAPI_Write_r()
1607 if ( pHeader >= pReq->m_respPktHeaderEnd - 1) in LSAPI_Write_r()
1609 if ( LSAPI_Flush_r( pReq ) == -1 ) in LSAPI_Write_r()
1611 pHeader = pReq->m_respPktHeader; in LSAPI_Write_r()
1614 if ( pHeader != pReq->m_respPktHeader ) in LSAPI_Write_r()
1615 if ( LSAPI_Flush_r( pReq ) == -1 ) in LSAPI_Write_r()
1685 ssize_t LSAPI_sendfile_r( LSAPI_Request * pReq, int fdIn, off_t* off, size_t size ) in LSAPI_sendfile_r() argument
1687 struct lsapi_packet_header * pHeader = pReq->m_respPktHeader; in LSAPI_sendfile_r()
1688 if ( !pReq || (pReq->m_fd == -1) || fdIn == -1 ) in LSAPI_sendfile_r()
1690 if ( pReq->m_reqState & LSAPI_ST_RESP_HEADER ) in LSAPI_sendfile_r()
1692 LSAPI_FinalizeRespHeaders_r( pReq ); in LSAPI_sendfile_r()
1694 pReq->m_reqState |= LSAPI_ST_RESP_BODY; in LSAPI_sendfile_r()
1696 LSAPI_Flush_r(pReq); in LSAPI_sendfile_r()
1702 …if (write(pReq->m_fd, (const char *) pHeader, LSAPI_PACKET_HEADER_LEN ) != LSAPI_PACKET_HEADER_LE… in LSAPI_sendfile_r()
1705 return gsendfile( pReq->m_fd, fdIn, off, size ); in LSAPI_sendfile_r()
1709 void Flush_RespBuf_r( LSAPI_Request * pReq ) in Flush_RespBuf_r() argument
1711 struct lsapi_packet_header * pHeader = pReq->m_respPktHeader; in Flush_RespBuf_r()
1712 int bufLen = pReq->m_pRespBufPos - pReq->m_pRespBuf; in Flush_RespBuf_r()
1713 pReq->m_reqState |= LSAPI_ST_RESP_BODY; in Flush_RespBuf_r()
1716 pReq->m_totalLen += bufLen + LSAPI_PACKET_HEADER_LEN; in Flush_RespBuf_r()
1718 pReq->m_pIovecCur->iov_base = (void *)pHeader; in Flush_RespBuf_r()
1719 pReq->m_pIovecCur->iov_len = LSAPI_PACKET_HEADER_LEN; in Flush_RespBuf_r()
1720 ++pReq->m_pIovecCur; in Flush_RespBuf_r()
1724 pReq->m_pIovecCur->iov_base = (void *)pReq->m_pRespBuf; in Flush_RespBuf_r()
1725 pReq->m_pIovecCur->iov_len = bufLen; in Flush_RespBuf_r()
1726 pReq->m_pRespBufPos = pReq->m_pRespBuf; in Flush_RespBuf_r()
1727 ++pReq->m_pIovecCur; in Flush_RespBuf_r()
1735 int LSAPI_Flush_r( LSAPI_Request * pReq ) in LSAPI_Flush_r() argument
1739 if ( !pReq ) in LSAPI_Flush_r()
1741 n = pReq->m_pIovecCur - pReq->m_pIovecToWrite; in LSAPI_Flush_r()
1742 if (( 0 == n )&&( pReq->m_pRespBufPos == pReq->m_pRespBuf )) in LSAPI_Flush_r()
1744 if ( pReq->m_fd == -1 ) in LSAPI_Flush_r()
1746 pReq->m_pRespBufPos = pReq->m_pRespBuf; in LSAPI_Flush_r()
1747 pReq->m_totalLen = 0; in LSAPI_Flush_r()
1748 pReq->m_pIovecCur = pReq->m_pIovecToWrite = pReq->m_pIovec; in LSAPI_Flush_r()
1751 if ( pReq->m_reqState & LSAPI_ST_RESP_HEADER ) in LSAPI_Flush_r()
1753 LSAPI_FinalizeRespHeaders_r( pReq ); in LSAPI_Flush_r()
1755 if ( pReq->m_pRespBufPos != pReq->m_pRespBuf ) in LSAPI_Flush_r()
1757 Flush_RespBuf_r( pReq ); in LSAPI_Flush_r()
1760 n = pReq->m_pIovecCur - pReq->m_pIovecToWrite; in LSAPI_Flush_r()
1764 ret = lsapi_writev( pReq->m_fd, &pReq->m_pIovecToWrite, in LSAPI_Flush_r()
1765 n, pReq->m_totalLen ); in LSAPI_Flush_r()
1766 if ( ret < pReq->m_totalLen ) in LSAPI_Flush_r()
1768 lsapi_close( pReq->m_fd ); in LSAPI_Flush_r()
1769 pReq->m_fd = -1; in LSAPI_Flush_r()
1772 pReq->m_totalLen = 0; in LSAPI_Flush_r()
1773 pReq->m_pIovecCur = pReq->m_pIovecToWrite = pReq->m_pIovec; in LSAPI_Flush_r()
1779 ssize_t LSAPI_Write_Stderr_r( LSAPI_Request * pReq, const char * pBuf, size_t len ) in LSAPI_Write_Stderr_r() argument
1790 if ( !pReq ) in LSAPI_Write_Stderr_r()
1792 if (( pReq->m_fd == -1 )||(pReq->m_fd == pReq->m_fdListen )) in LSAPI_Write_Stderr_r()
1794 if ( pReq->m_pRespBufPos != pReq->m_pRespBuf ) in LSAPI_Write_Stderr_r()
1796 LSAPI_Flush_r( pReq ); in LSAPI_Write_Stderr_r()
1820 ret = lsapi_writev( pReq->m_fd, &pIov, in LSAPI_Write_Stderr_r()
1824 lsapi_close( pReq->m_fd ); in LSAPI_Write_Stderr_r()
1825 pReq->m_fd = -1; in LSAPI_Write_Stderr_r()
1832 static char * GetHeaderVar( LSAPI_Request * pReq, const char * name ) in GetHeaderVar() argument
1838 if ( pReq->m_pHeaderIndex->m_headerOff[i] ) in GetHeaderVar()
1842 pValue = pReq->m_pHttpHeader in GetHeaderVar()
1843 + pReq->m_pHeaderIndex->m_headerOff[i]; in GetHeaderVar()
1844 if ( *(pValue + pReq->m_pHeaderIndex->m_headerLen[i]) != '\0') in GetHeaderVar()
1846 *(pValue + pReq->m_pHeaderIndex->m_headerLen[i]) = '\0'; in GetHeaderVar()
1852 if ( pReq->m_pHeader->m_cntUnknownHeaders > 0 ) in GetHeaderVar()
1859 pCur = pReq->m_pUnknownHeader; in GetHeaderVar()
1860 pEnd = pCur + pReq->m_pHeader->m_cntUnknownHeaders; in GetHeaderVar()
1863 pKey = pReq->m_pHttpHeader + pCur->nameOff; in GetHeaderVar()
1877 pValue = pReq->m_pHttpHeader + pCur->valueOff; in GetHeaderVar()
1892 char * LSAPI_GetEnv_r( LSAPI_Request * pReq, const char * name ) in LSAPI_GetEnv_r() argument
1894 struct LSAPI_key_value_pair * pBegin = pReq->m_pEnvList; in LSAPI_GetEnv_r()
1895 struct LSAPI_key_value_pair * pEnd = pBegin + pReq->m_pHeader->m_cntEnv; in LSAPI_GetEnv_r()
1896 if ( !pReq || !name ) in LSAPI_GetEnv_r()
1900 return GetHeaderVar( pReq, name ); in LSAPI_GetEnv_r()
1925 int LSAPI_ForeachOrgHeader_r( LSAPI_Request * pReq, in LSAPI_ForeachOrgHeader_r() argument
1935 if ( !pReq || !fn ) in LSAPI_ForeachOrgHeader_r()
1938 if ( !pReq->m_pHeaderIndex ) in LSAPI_ForeachOrgHeader_r()
1943 if ( pReq->m_pHeaderIndex->m_headerOff[i] ) in LSAPI_ForeachOrgHeader_r()
1945 len = pReq->m_pHeaderIndex->m_headerLen[i]; in LSAPI_ForeachOrgHeader_r()
1946 pValue = pReq->m_pHttpHeader + pReq->m_pHeaderIndex->m_headerOff[i]; in LSAPI_ForeachOrgHeader_r()
1960 if ( pReq->m_pHeader->m_cntUnknownHeaders > 0 ) in LSAPI_ForeachOrgHeader_r()
1965 pCur = pReq->m_pUnknownHeader; in LSAPI_ForeachOrgHeader_r()
1966 pEnd = pCur + pReq->m_pHeader->m_cntUnknownHeaders; in LSAPI_ForeachOrgHeader_r()
1969 pKey = pReq->m_pHttpHeader + pCur->nameOff; in LSAPI_ForeachOrgHeader_r()
1973 pValue = pReq->m_pHttpHeader + pCur->valueOff; in LSAPI_ForeachOrgHeader_r()
2002 int LSAPI_ForeachHeader_r( LSAPI_Request * pReq, in LSAPI_ForeachHeader_r() argument
2010 if ( !pReq || !fn ) in LSAPI_ForeachHeader_r()
2014 if ( pReq->m_pHeaderIndex->m_headerOff[i] ) in LSAPI_ForeachHeader_r()
2016 len = pReq->m_pHeaderIndex->m_headerLen[i]; in LSAPI_ForeachHeader_r()
2017 pValue = pReq->m_pHttpHeader + pReq->m_pHeaderIndex->m_headerOff[i]; in LSAPI_ForeachHeader_r()
2026 if ( pReq->m_pHeader->m_cntUnknownHeaders > 0 ) in LSAPI_ForeachHeader_r()
2034 pCur = pReq->m_pUnknownHeader; in LSAPI_ForeachHeader_r()
2035 pEnd = pCur + pReq->m_pHeader->m_cntUnknownHeaders; in LSAPI_ForeachHeader_r()
2038 pKey = pReq->m_pHttpHeader + pCur->nameOff; in LSAPI_ForeachHeader_r()
2057 pValue = pReq->m_pHttpHeader + pCur->valueOff; in LSAPI_ForeachHeader_r()
2066 return count + pReq->m_pHeader->m_cntUnknownHeaders; in LSAPI_ForeachHeader_r()
2090 int LSAPI_ForeachEnv_r( LSAPI_Request * pReq, in LSAPI_ForeachEnv_r() argument
2093 if ( !pReq || !fn ) in LSAPI_ForeachEnv_r()
2095 if ( pReq->m_pHeader->m_cntEnv > 0 ) in LSAPI_ForeachEnv_r()
2097 return EnvForeach( pReq->m_pEnvList, pReq->m_pHeader->m_cntEnv, in LSAPI_ForeachEnv_r()
2105 int LSAPI_ForeachSpecialEnv_r( LSAPI_Request * pReq, in LSAPI_ForeachSpecialEnv_r() argument
2108 if ( !pReq || !fn ) in LSAPI_ForeachSpecialEnv_r()
2110 if ( pReq->m_pHeader->m_cntSpecialEnv > 0 ) in LSAPI_ForeachSpecialEnv_r()
2112 return EnvForeach( pReq->m_pSpecialEnvList, in LSAPI_ForeachSpecialEnv_r()
2113 pReq->m_pHeader->m_cntSpecialEnv, in LSAPI_ForeachSpecialEnv_r()
2122 int LSAPI_FinalizeRespHeaders_r( LSAPI_Request * pReq ) in LSAPI_FinalizeRespHeaders_r() argument
2124 if ( !pReq || !pReq->m_pIovec ) in LSAPI_FinalizeRespHeaders_r()
2126 if ( !( pReq->m_reqState & LSAPI_ST_RESP_HEADER ) ) in LSAPI_FinalizeRespHeaders_r()
2128 pReq->m_reqState &= ~LSAPI_ST_RESP_HEADER; in LSAPI_FinalizeRespHeaders_r()
2129 if ( pReq->m_pRespHeaderBufPos > pReq->m_pRespHeaderBuf ) in LSAPI_FinalizeRespHeaders_r()
2131 pReq->m_pIovecCur->iov_base = (void *)pReq->m_pRespHeaderBuf; in LSAPI_FinalizeRespHeaders_r()
2132 pReq->m_pIovecCur->iov_len = pReq->m_pRespHeaderBufPos - pReq->m_pRespHeaderBuf; in LSAPI_FinalizeRespHeaders_r()
2133 pReq->m_totalLen += pReq->m_pIovecCur->iov_len; in LSAPI_FinalizeRespHeaders_r()
2134 ++pReq->m_pIovecCur; in LSAPI_FinalizeRespHeaders_r()
2137 pReq->m_pIovec->iov_len = sizeof( struct lsapi_resp_header) in LSAPI_FinalizeRespHeaders_r()
2138 + pReq->m_respHeader.m_respInfo.m_cntHeaders * sizeof( short ); in LSAPI_FinalizeRespHeaders_r()
2139 pReq->m_totalLen += pReq->m_pIovec->iov_len; in LSAPI_FinalizeRespHeaders_r()
2141 lsapi_buildPacketHeader( &pReq->m_respHeader.m_pktHeader, in LSAPI_FinalizeRespHeaders_r()
2142 LSAPI_RESP_HEADER, pReq->m_totalLen ); in LSAPI_FinalizeRespHeaders_r()
2143 pReq->m_pIovec->iov_base = (void *)&pReq->m_respHeader; in LSAPI_FinalizeRespHeaders_r()
2144 pReq->m_pIovecToWrite = pReq->m_pIovec; in LSAPI_FinalizeRespHeaders_r()
2149 int LSAPI_AppendRespHeader2_r( LSAPI_Request * pReq, const char * pHeaderName, in LSAPI_AppendRespHeader2_r() argument
2153 if ( !pReq || !pHeaderName || !pHeaderValue ) in LSAPI_AppendRespHeader2_r()
2155 if ( pReq->m_reqState & LSAPI_ST_RESP_BODY ) in LSAPI_AppendRespHeader2_r()
2157 if ( pReq->m_respHeader.m_respInfo.m_cntHeaders >= LSAPI_MAX_RESP_HEADERS ) in LSAPI_AppendRespHeader2_r()
2185 if ( pReq->m_pRespHeaderBufPos + len + 1 > pReq->m_pRespHeaderBufEnd ) in LSAPI_AppendRespHeader2_r()
2187 int newlen = pReq->m_pRespHeaderBufPos + len + 4096 - pReq->m_pRespHeaderBuf; in LSAPI_AppendRespHeader2_r()
2189 if ( allocateRespHeaderBuf( pReq, newlen ) == -1 ) in LSAPI_AppendRespHeader2_r()
2192 memmove( pReq->m_pRespHeaderBufPos, pHeaderName, nameLen ); in LSAPI_AppendRespHeader2_r()
2193 pReq->m_pRespHeaderBufPos += nameLen; in LSAPI_AppendRespHeader2_r()
2194 *pReq->m_pRespHeaderBufPos++ = ':'; in LSAPI_AppendRespHeader2_r()
2195 memmove( pReq->m_pRespHeaderBufPos, pHeaderValue, valLen ); in LSAPI_AppendRespHeader2_r()
2196 pReq->m_pRespHeaderBufPos += valLen; in LSAPI_AppendRespHeader2_r()
2197 *pReq->m_pRespHeaderBufPos++ = 0; in LSAPI_AppendRespHeader2_r()
2199 pReq->m_respHeaderLen[pReq->m_respHeader.m_respInfo.m_cntHeaders] = len; in LSAPI_AppendRespHeader2_r()
2200 ++pReq->m_respHeader.m_respInfo.m_cntHeaders; in LSAPI_AppendRespHeader2_r()
2206 int LSAPI_AppendRespHeader_r( LSAPI_Request * pReq, const char * pBuf, int len ) in LSAPI_AppendRespHeader_r() argument
2208 if ( !pReq || !pBuf || len <= 0 || len > LSAPI_RESP_HTTP_HEADER_MAX ) in LSAPI_AppendRespHeader_r()
2210 if ( pReq->m_reqState & LSAPI_ST_RESP_BODY ) in LSAPI_AppendRespHeader_r()
2212 if ( pReq->m_respHeader.m_respInfo.m_cntHeaders >= LSAPI_MAX_RESP_HEADERS ) in LSAPI_AppendRespHeader_r()
2224 if ( pReq->m_pRespHeaderBufPos + len + 1 > pReq->m_pRespHeaderBufEnd ) in LSAPI_AppendRespHeader_r()
2226 int newlen = pReq->m_pRespHeaderBufPos + len + 4096 - pReq->m_pRespHeaderBuf; in LSAPI_AppendRespHeader_r()
2228 if ( allocateRespHeaderBuf( pReq, newlen ) == -1 ) in LSAPI_AppendRespHeader_r()
2231 memmove( pReq->m_pRespHeaderBufPos, pBuf, len ); in LSAPI_AppendRespHeader_r()
2232 pReq->m_pRespHeaderBufPos += len; in LSAPI_AppendRespHeader_r()
2233 *pReq->m_pRespHeaderBufPos++ = 0; in LSAPI_AppendRespHeader_r()
2235 pReq->m_respHeaderLen[pReq->m_respHeader.m_respInfo.m_cntHeaders] = len; in LSAPI_AppendRespHeader_r()
2236 ++pReq->m_respHeader.m_respInfo.m_cntHeaders; in LSAPI_AppendRespHeader_r()
2711 static int lsapi_prefork_server_accept( lsapi_prefork_server * pServer, LSAPI_Request * pReq ) in lsapi_prefork_server_accept() argument
2809 pReq->m_fd = lsapi_accept( pServer->m_fd ); in lsapi_prefork_server_accept()
2810 if ( pReq->m_fd != -1 ) in lsapi_prefork_server_accept()
2834 lsapi_set_nblock( pReq->m_fd, 0 ); in lsapi_prefork_server_accept()
2835 if ( pReq->m_fdListen != -1 ) in lsapi_prefork_server_accept()
2837 close( pReq->m_fdListen ); in lsapi_prefork_server_accept()
2838 pReq->m_fdListen = -1; in lsapi_prefork_server_accept()
2847 lsapi_notify_pid( pReq->m_fd ); in lsapi_prefork_server_accept()
2867 close( pReq->m_fd ); in lsapi_prefork_server_accept()
2868 pReq->m_fd = -1; in lsapi_prefork_server_accept()
2894 int LSAPI_Prefork_Accept_r( LSAPI_Request * pReq ) in LSAPI_Prefork_Accept_r() argument
2902 LSAPI_Finish_r( pReq ); in LSAPI_Prefork_Accept_r()
2908 if ( lsapi_prefork_server_accept( g_prefork_server, pReq ) == -1 ) in LSAPI_Prefork_Accept_r()
2922 if ( pReq->m_fd != -1 ) in LSAPI_Prefork_Accept_r()
2924 fd = pReq->m_fd; in LSAPI_Prefork_Accept_r()
2926 else if ( pReq->m_fdListen != -1 ) in LSAPI_Prefork_Accept_r()
2927 fd = pReq->m_fdListen; in LSAPI_Prefork_Accept_r()
2967 if ( fd == pReq->m_fdListen ) in LSAPI_Prefork_Accept_r()
2969 pReq->m_fd = lsapi_accept( pReq->m_fdListen ); in LSAPI_Prefork_Accept_r()
2970 if ( pReq->m_fd != -1 ) in LSAPI_Prefork_Accept_r()
2972 fd = pReq->m_fd; in LSAPI_Prefork_Accept_r()
2977 close( pReq->m_fdListen ); in LSAPI_Prefork_Accept_r()
2978 pReq->m_fdListen = -1; in LSAPI_Prefork_Accept_r()
2981 if ( notify_req_received( pReq->m_fd ) == -1 ) in LSAPI_Prefork_Accept_r()
2997 if ( !readReq( pReq ) ) in LSAPI_Prefork_Accept_r()
3009 lsapi_close( pReq->m_fd ); in LSAPI_Prefork_Accept_r()
3010 pReq->m_fd = -1; in LSAPI_Prefork_Accept_r()
3011 LSAPI_Reset_r( pReq ); in LSAPI_Prefork_Accept_r()
3266 int LSAPI_ErrResponse_r( LSAPI_Request * pReq, int code, const char ** pRespHeaders, in LSAPI_ErrResponse_r() argument
3269 LSAPI_SetRespStatus_r( pReq, code ); in LSAPI_ErrResponse_r()
3274 LSAPI_AppendRespHeader_r( pReq, *pRespHeaders, strlen( *pRespHeaders ) ); in LSAPI_ErrResponse_r()
3280 LSAPI_Write_r( pReq, pBody, bodyLen ); in LSAPI_ErrResponse_r()
3282 LSAPI_Finish_r( pReq ); in LSAPI_ErrResponse_r()