Lines Matching refs:pReq

179 void Flush_RespBuf_r( LSAPI_Request * pReq );
421 static void lsapi_close_connection(LSAPI_Request *pReq) in lsapi_close_connection() argument
423 if (pReq->m_fd == -1) in lsapi_close_connection()
425 lsapi_close(pReq->m_fd); in lsapi_close_connection()
426 pReq->m_fd = -1; in lsapi_close_connection()
534 static inline int allocateBuf( LSAPI_Request * pReq, int size ) in allocateBuf() argument
536 char * pBuf = (char *)realloc( pReq->m_pReqBuf, size ); in allocateBuf()
539 pReq->m_pReqBuf = pBuf; in allocateBuf()
540 pReq->m_reqBufSize = size; in allocateBuf()
541 pReq->m_pHeader = (struct lsapi_req_header *)pReq->m_pReqBuf; in allocateBuf()
548 static int allocateIovec( LSAPI_Request * pReq, int n ) in allocateIovec() argument
551 pReq->m_pIovec, sizeof(struct iovec) * n ); in allocateIovec()
554 pReq->m_pIovecToWrite = p + ( pReq->m_pIovecToWrite - pReq->m_pIovec ); in allocateIovec()
555 pReq->m_pIovecCur = p + ( pReq->m_pIovecCur - pReq->m_pIovec ); in allocateIovec()
556 pReq->m_pIovec = p; in allocateIovec()
557 pReq->m_pIovecEnd = p + n; in allocateIovec()
562 static int allocateRespHeaderBuf( LSAPI_Request * pReq, int size ) in allocateRespHeaderBuf() argument
564 char * p = (char *)realloc( pReq->m_pRespHeaderBuf, size ); in allocateRespHeaderBuf()
567 pReq->m_pRespHeaderBufPos = p + ( pReq->m_pRespHeaderBufPos - pReq->m_pRespHeaderBuf ); in allocateRespHeaderBuf()
568 pReq->m_pRespHeaderBuf = p; in allocateRespHeaderBuf()
569 pReq->m_pRespHeaderBufEnd = p + size; in allocateRespHeaderBuf()
679 static inline void fixEndian( LSAPI_Request * pReq ) in fixEndian() argument
681 struct lsapi_req_header *p= pReq->m_pHeader; in fixEndian()
694 static void fixHeaderIndexEndian( LSAPI_Request * pReq ) in fixHeaderIndexEndian() argument
699 if ( pReq->m_pHeaderIndex->m_headerOff[i] ) in fixHeaderIndexEndian()
702 char * p = (char *)(&pReq->m_pHeaderIndex->m_headerLen[i]); in fixHeaderIndexEndian()
706 swapIntEndian( &pReq->m_pHeaderIndex->m_headerOff[i] ); in fixHeaderIndexEndian()
709 if ( pReq->m_pHeader->m_cntUnknownHeaders > 0 ) in fixHeaderIndexEndian()
712 pCur = pReq->m_pUnknownHeader; in fixHeaderIndexEndian()
713 pEnd = pCur + pReq->m_pHeader->m_cntUnknownHeaders; in fixHeaderIndexEndian()
726 static int validateHeaders( LSAPI_Request * pReq ) in validateHeaders() argument
728 int totalLen = pReq->m_pHeader->m_httpHeaderLen; in validateHeaders()
732 if ( pReq->m_pHeaderIndex->m_headerOff[i] ) in validateHeaders()
734 if (pReq->m_pHeaderIndex->m_headerOff[i] > totalLen in validateHeaders()
735 || pReq->m_pHeaderIndex->m_headerLen[i] in validateHeaders()
736 + pReq->m_pHeaderIndex->m_headerOff[i] > totalLen) in validateHeaders()
740 if (pReq->m_pHeader->m_cntUnknownHeaders > 0) in validateHeaders()
743 pCur = pReq->m_pUnknownHeader; in validateHeaders()
744 pEnd = pCur + pReq->m_pHeader->m_cntUnknownHeaders; in validateHeaders()
891 static int LSAPI_perror_r( LSAPI_Request * pReq, const char * pErr1, const char *pErr2 ) in LSAPI_perror_r() argument
898 if ( pReq ) in LSAPI_perror_r()
899 LSAPI_Write_Stderr_r( pReq, achError, n ); in LSAPI_perror_r()
906 static int lsapi_lve_error( LSAPI_Request * pReq ) in lsapi_lve_error() argument
925 LSAPI_ErrResponse_r( pReq, 508, headers, achBody, sizeof( achBody ) - 1 ); in lsapi_lve_error()
930 static int lsapi_enterLVE( LSAPI_Request * pReq, uid_t uid ) in lsapi_enterLVE() argument
941 LSAPI_perror_r(pReq, "LSAPI: lve_enter() failure, reached resource limit.", NULL ); in lsapi_enterLVE()
942 lsapi_lve_error( pReq ); in lsapi_enterLVE()
952 static int lsapi_jailLVE( LSAPI_Request * pReq, uid_t uid, struct passwd * pw ) in lsapi_jailLVE() argument
962 LSAPI_perror_r( pReq, "LSAPI: jail() failure.", NULL ); in lsapi_jailLVE()
998 static int setUID_LVE(LSAPI_Request * pReq, uid_t uid, gid_t gid, const char * pChroot) in setUID_LVE() argument
1006 if( lsapi_enterLVE( pReq, uid ) == -1 ) in setUID_LVE()
1010 rv = lsapi_jailLVE( pReq, uid, pw ); in setUID_LVE()
1036 LSAPI_perror_r(pReq, "LSAPI: setgid()", NULL); in setUID_LVE()
1044 LSAPI_perror_r(pReq, "LSAPI: initgroups()", NULL); in setUID_LVE()
1053 LSAPI_perror_r(pReq, "LSAPI: setgroups()", NULL); in setUID_LVE()
1061 LSAPI_perror_r(pReq, "LSAPI: chroot()", NULL); in setUID_LVE()
1068 LSAPI_perror_r(pReq, "LSAPI: setuid()", NULL); in setUID_LVE()
1078 static int lsapi_suexec_auth( LSAPI_Request *pReq, in lsapi_suexec_auth() argument
1097 static int lsapi_changeUGid( LSAPI_Request * pReq ) in lsapi_changeUGid() argument
1113 i = pReq->m_pHeader->m_cntSpecialEnv - 1; in lsapi_changeUGid()
1116 pEnv = pReq->m_pSpecialEnvList + i; in lsapi_changeUGid()
1120 --pReq->m_pHeader->m_cntSpecialEnv; in lsapi_changeUGid()
1125 --pReq->m_pHeader->m_cntSpecialEnv; in lsapi_changeUGid()
1135 …if ( pEnv&& lsapi_suexec_auth( pReq, pAuth->pValue, pAuth->valLen, pEnv->pValue, pEnv->valLen ) ==… in lsapi_changeUGid()
1161 if ( setUID_LVE( pReq, uid, gid, pChroot ) == -1 ) in lsapi_changeUGid()
1168 if ( pReq->m_fdListen != -1 ) in lsapi_changeUGid()
1170 close( pReq->m_fdListen ); in lsapi_changeUGid()
1171 pReq->m_fdListen = -1; in lsapi_changeUGid()
1174 pStderrLog = LSAPI_GetEnv_r( pReq, "LSAPI_STDERR_LOG"); in lsapi_changeUGid()
1183 static int parseContentLenFromHeader(LSAPI_Request * pReq) in parseContentLenFromHeader() argument
1185 const char * pContentLen = LSAPI_GetHeader_r( pReq, H_CONTENT_LENGTH ); in parseContentLenFromHeader()
1187 pReq->m_reqBodyLen = strtoll( pContentLen, NULL, 10 ); in parseContentLenFromHeader()
1192 static int parseRequest( LSAPI_Request * pReq, int totalLen ) in parseRequest() argument
1195 char * pBegin = pReq->m_pReqBuf + sizeof( struct lsapi_req_header ); in parseRequest()
1196 char * pEnd = pReq->m_pReqBuf + totalLen; in parseRequest()
1198 pReq->m_pHeader->m_pktHeader.m_flag & LSAPI_ENDIAN_BIT ) ); in parseRequest()
1201 fixEndian( pReq ); in parseRequest()
1203 if ( (pReq->m_specialEnvListSize < pReq->m_pHeader->m_cntSpecialEnv )&& in parseRequest()
1204 allocateEnvList( &pReq->m_pSpecialEnvList, in parseRequest()
1205 &pReq->m_specialEnvListSize, in parseRequest()
1206 pReq->m_pHeader->m_cntSpecialEnv ) == -1 ) in parseRequest()
1208 if ( (pReq->m_envListSize < pReq->m_pHeader->m_cntEnv )&& in parseRequest()
1209 allocateEnvList( &pReq->m_pEnvList, &pReq->m_envListSize, in parseRequest()
1210 pReq->m_pHeader->m_cntEnv ) == -1 ) in parseRequest()
1213 if ( parseEnv( pReq->m_pSpecialEnvList, in parseRequest()
1214 pReq->m_pHeader->m_cntSpecialEnv, in parseRequest()
1217 if ( parseEnv( pReq->m_pEnvList, pReq->m_pHeader->m_cntEnv, in parseRequest()
1220 if (pReq->m_pHeader->m_scriptFileOff < 0 in parseRequest()
1221 || pReq->m_pHeader->m_scriptFileOff >= totalLen in parseRequest()
1222 || pReq->m_pHeader->m_scriptNameOff < 0 in parseRequest()
1223 || pReq->m_pHeader->m_scriptNameOff >= totalLen in parseRequest()
1224 || pReq->m_pHeader->m_queryStringOff < 0 in parseRequest()
1225 || pReq->m_pHeader->m_queryStringOff >= totalLen in parseRequest()
1226 || pReq->m_pHeader->m_requestMethodOff < 0 in parseRequest()
1227 || pReq->m_pHeader->m_requestMethodOff >= totalLen) in parseRequest()
1232 pReq->m_pScriptFile = pReq->m_pReqBuf + pReq->m_pHeader->m_scriptFileOff; in parseRequest()
1233 pReq->m_pScriptName = pReq->m_pReqBuf + pReq->m_pHeader->m_scriptNameOff; in parseRequest()
1234 pReq->m_pQueryString = pReq->m_pReqBuf + pReq->m_pHeader->m_queryStringOff; in parseRequest()
1235 pReq->m_pRequestMethod = pReq->m_pReqBuf + pReq->m_pHeader->m_requestMethodOff; in parseRequest()
1237 pBegin = pReq->m_pReqBuf + (( pBegin - pReq->m_pReqBuf + 7 ) & (~0x7)); in parseRequest()
1238 pReq->m_pHeaderIndex = ( struct lsapi_http_header_index * )pBegin; in parseRequest()
1241 pReq->m_pUnknownHeader = (struct lsapi_header_offset *)pBegin; in parseRequest()
1243 pReq->m_pHeader->m_cntUnknownHeaders; in parseRequest()
1245 pReq->m_pHttpHeader = pBegin; in parseRequest()
1246 pBegin += pReq->m_pHeader->m_httpHeaderLen; in parseRequest()
1250 "real: %ld\n", totalLen, pBegin - pReq->m_pReqBuf ); in parseRequest()
1255 fixHeaderIndexEndian( pReq ); in parseRequest()
1258 if (validateHeaders(pReq) == -1) in parseRequest()
1264 pReq->m_reqBodyLen = pReq->m_pHeader->m_reqBodyLen; in parseRequest()
1265 if ( pReq->m_reqBodyLen == -2 ) in parseRequest()
1267 parseContentLenFromHeader(pReq); in parseRequest()
1374 static int readReq( LSAPI_Request * pReq ) in readReq() argument
1378 if ( !pReq ) in readReq()
1380 if ( pReq->m_reqBufSize < 8192 ) in readReq()
1382 if ( allocateBuf( pReq, 8192 ) == -1 ) in readReq()
1386 while ( pReq->m_bufRead < LSAPI_PACKET_HEADER_LEN ) in readReq()
1388 len = lsapi_read( pReq->m_fd, pReq->m_pReqBuf, pReq->m_reqBufSize ); in readReq()
1391 pReq->m_bufRead += len; in readReq()
1393 pReq->m_reqState = LSAPI_ST_REQ_HEADER; in readReq()
1395 packetLen = verifyHeader( &pReq->m_pHeader->m_pktHeader, LSAPI_BEGIN_REQUEST ); in readReq()
1407 if ( packetLen + 1024 > pReq->m_reqBufSize ) in readReq()
1409 if ( allocateBuf( pReq, packetLen + 1024 ) == -1 ) in readReq()
1412 while( packetLen > pReq->m_bufRead ) in readReq()
1414 … len = lsapi_read( pReq->m_fd, pReq->m_pReqBuf + pReq->m_bufRead, packetLen - pReq->m_bufRead ); in readReq()
1417 pReq->m_bufRead += len; in readReq()
1419 if ( parseRequest( pReq, packetLen ) < 0 ) in readReq()
1425 pReq->m_reqState = LSAPI_ST_REQ_BODY | LSAPI_ST_RESP_HEADER; in readReq()
1429 if ( lsapi_changeUGid( pReq ) ) in readReq()
1433 pReq->m_bufProcessed = packetLen; in readReq()
1437 return notify_req_received( pReq->m_fd ); in readReq()
1492 int LSAPI_InitRequest( LSAPI_Request * pReq, int fd ) in LSAPI_InitRequest() argument
1495 if ( !pReq ) in LSAPI_InitRequest()
1497 memset( pReq, 0, sizeof( LSAPI_Request ) ); in LSAPI_InitRequest()
1498 if ( allocateIovec( pReq, 16 ) == -1 ) in LSAPI_InitRequest()
1500 pReq->m_pRespBuf = pReq->m_pRespBufPos = (char *)malloc( LSAPI_RESP_BUF_SIZE ); in LSAPI_InitRequest()
1501 if ( !pReq->m_pRespBuf ) in LSAPI_InitRequest()
1503 pReq->m_pRespBufEnd = pReq->m_pRespBuf + LSAPI_RESP_BUF_SIZE; in LSAPI_InitRequest()
1504 pReq->m_pIovecCur = pReq->m_pIovecToWrite = pReq->m_pIovec + 1; in LSAPI_InitRequest()
1505 pReq->m_respPktHeaderEnd = &pReq->m_respPktHeader[5]; in LSAPI_InitRequest()
1506 if ( allocateRespHeaderBuf( pReq, LSAPI_INIT_RESP_HEADER_LEN ) == -1 ) in LSAPI_InitRequest()
1518 pReq->m_fdListen = -1; in LSAPI_InitRequest()
1519 pReq->m_fd = fd; in LSAPI_InitRequest()
1523 pReq->m_fdListen = fd; in LSAPI_InitRequest()
1524 pReq->m_fd = -1; in LSAPI_InitRequest()
1537 int LSAPI_Is_Listen_r( LSAPI_Request * pReq) in LSAPI_Is_Listen_r() argument
1539 return pReq->m_fdListen != -1; in LSAPI_Is_Listen_r()
1543 int LSAPI_Accept_r( LSAPI_Request * pReq ) in LSAPI_Accept_r() argument
1549 if ( !pReq ) in LSAPI_Accept_r()
1551 if ( LSAPI_Finish_r( pReq ) == -1 ) in LSAPI_Accept_r()
1553 lsapi_set_nblock( pReq->m_fdListen , 0 ); in LSAPI_Accept_r()
1556 if ( pReq->m_fd == -1 ) in LSAPI_Accept_r()
1558 if ( pReq->m_fdListen != -1) in LSAPI_Accept_r()
1561 pReq->m_fd = accept( pReq->m_fdListen, in LSAPI_Accept_r()
1563 if ( pReq->m_fd == -1 ) in LSAPI_Accept_r()
1577 lsapi_set_nblock( pReq->m_fd , 0 ); in LSAPI_Accept_r()
1580 setsockopt(pReq->m_fd, IPPROTO_TCP, TCP_NODELAY, in LSAPI_Accept_r()
1586 if ( notify_req_received( pReq->m_fd ) == -1 ) in LSAPI_Accept_r()
1593 if ( !readReq( pReq ) ) in LSAPI_Accept_r()
1596 lsapi_close_connection(pReq); in LSAPI_Accept_r()
1597 LSAPI_Reset_r( pReq ); in LSAPI_Accept_r()
1610 int LSAPI_Finish_r( LSAPI_Request * pReq ) in LSAPI_Finish_r() argument
1613 if ( !pReq ) in LSAPI_Finish_r()
1615 if (pReq->m_reqState) in LSAPI_Finish_r()
1617 if ( pReq->m_fd != -1 ) in LSAPI_Finish_r()
1619 if ( pReq->m_reqState & LSAPI_ST_RESP_HEADER ) in LSAPI_Finish_r()
1621 LSAPI_FinalizeRespHeaders_r( pReq ); in LSAPI_Finish_r()
1623 if ( pReq->m_pRespBufPos != pReq->m_pRespBuf ) in LSAPI_Finish_r()
1625 Flush_RespBuf_r( pReq ); in LSAPI_Finish_r()
1628 pReq->m_pIovecCur->iov_base = (void *)finish_close; in LSAPI_Finish_r()
1629 pReq->m_pIovecCur->iov_len = LSAPI_PACKET_HEADER_LEN; in LSAPI_Finish_r()
1630 pReq->m_totalLen += LSAPI_PACKET_HEADER_LEN; in LSAPI_Finish_r()
1631 ++pReq->m_pIovecCur; in LSAPI_Finish_r()
1632 LSAPI_Flush_r( pReq ); in LSAPI_Finish_r()
1634 LSAPI_Reset_r( pReq ); in LSAPI_Finish_r()
1640 int LSAPI_End_Response_r(LSAPI_Request * pReq) in LSAPI_End_Response_r() argument
1642 if (!pReq) in LSAPI_End_Response_r()
1644 if (pReq->m_reqState & LSAPI_ST_BACKGROUND) in LSAPI_End_Response_r()
1646 if (pReq->m_reqState) in LSAPI_End_Response_r()
1648 if ( pReq->m_fd != -1 ) in LSAPI_End_Response_r()
1650 if ( pReq->m_reqState & LSAPI_ST_RESP_HEADER ) in LSAPI_End_Response_r()
1652 if ( pReq->m_pRespHeaderBufPos <= pReq->m_pRespHeaderBuf ) in LSAPI_End_Response_r()
1655 LSAPI_FinalizeRespHeaders_r( pReq ); in LSAPI_End_Response_r()
1657 if ( pReq->m_pRespBufPos != pReq->m_pRespBuf ) in LSAPI_End_Response_r()
1659 Flush_RespBuf_r( pReq ); in LSAPI_End_Response_r()
1662 pReq->m_pIovecCur->iov_base = (void *)finish_close; in LSAPI_End_Response_r()
1663 pReq->m_pIovecCur->iov_len = LSAPI_PACKET_HEADER_LEN << 1; in LSAPI_End_Response_r()
1664 pReq->m_totalLen += LSAPI_PACKET_HEADER_LEN << 1; in LSAPI_End_Response_r()
1665 ++pReq->m_pIovecCur; in LSAPI_End_Response_r()
1666 LSAPI_Flush_r( pReq ); in LSAPI_End_Response_r()
1667 lsapi_close_connection(pReq); in LSAPI_End_Response_r()
1669 pReq->m_reqState |= LSAPI_ST_BACKGROUND; in LSAPI_End_Response_r()
1675 void LSAPI_Reset_r( LSAPI_Request * pReq ) in LSAPI_Reset_r() argument
1677 pReq->m_pRespBufPos = pReq->m_pRespBuf; in LSAPI_Reset_r()
1678 pReq->m_pIovecCur = pReq->m_pIovecToWrite = pReq->m_pIovec + 1; in LSAPI_Reset_r()
1679 pReq->m_pRespHeaderBufPos = pReq->m_pRespHeaderBuf; in LSAPI_Reset_r()
1681 memset( &pReq->m_pHeaderIndex, 0, in LSAPI_Reset_r()
1682 (char *)(pReq->m_respHeaderLen) - (char *)&pReq->m_pHeaderIndex ); in LSAPI_Reset_r()
1686 int LSAPI_Release_r( LSAPI_Request * pReq ) in LSAPI_Release_r() argument
1688 if ( pReq->m_pReqBuf ) in LSAPI_Release_r()
1689 free( pReq->m_pReqBuf ); in LSAPI_Release_r()
1690 if ( pReq->m_pSpecialEnvList ) in LSAPI_Release_r()
1691 free( pReq->m_pSpecialEnvList ); in LSAPI_Release_r()
1692 if ( pReq->m_pEnvList ) in LSAPI_Release_r()
1693 free( pReq->m_pEnvList ); in LSAPI_Release_r()
1694 if ( pReq->m_pRespHeaderBuf ) in LSAPI_Release_r()
1695 free( pReq->m_pRespHeaderBuf ); in LSAPI_Release_r()
1700 char * LSAPI_GetHeader_r( LSAPI_Request * pReq, int headerIndex ) in LSAPI_GetHeader_r() argument
1703 if ( !pReq || ((unsigned int)headerIndex > H_TRANSFER_ENCODING) ) in LSAPI_GetHeader_r()
1705 off = pReq->m_pHeaderIndex->m_headerOff[ headerIndex ]; in LSAPI_GetHeader_r()
1708 if ( *(pReq->m_pHttpHeader + off in LSAPI_GetHeader_r()
1709 + pReq->m_pHeaderIndex->m_headerLen[ headerIndex ]) ) in LSAPI_GetHeader_r()
1711 *( pReq->m_pHttpHeader + off in LSAPI_GetHeader_r()
1712 + pReq->m_pHeaderIndex->m_headerLen[ headerIndex ]) = 0; in LSAPI_GetHeader_r()
1714 return pReq->m_pHttpHeader + off; in LSAPI_GetHeader_r()
1718 static int readBodyToReqBuf( LSAPI_Request * pReq ) in readBodyToReqBuf() argument
1721 ssize_t len = pReq->m_bufRead - pReq->m_bufProcessed; in readBodyToReqBuf()
1724 pReq->m_bufRead = pReq->m_bufProcessed = pReq->m_pHeader->m_pktHeader.m_packetLen.m_iLen; in readBodyToReqBuf()
1726 bodyLeft = pReq->m_reqBodyLen - pReq->m_reqBodyRead; in readBodyToReqBuf()
1727 len = pReq->m_reqBufSize - pReq->m_bufRead; in readBodyToReqBuf()
1733 len = lsapi_read( pReq->m_fd, pReq->m_pReqBuf + pReq->m_bufRead, len ); in readBodyToReqBuf()
1735 pReq->m_bufRead += len; in readBodyToReqBuf()
1740 int LSAPI_ReqBodyGetChar_r( LSAPI_Request * pReq ) in LSAPI_ReqBodyGetChar_r() argument
1742 if (!pReq || (pReq->m_fd ==-1) ) in LSAPI_ReqBodyGetChar_r()
1744 if ( pReq->m_bufProcessed >= pReq->m_bufRead ) in LSAPI_ReqBodyGetChar_r()
1746 if ( readBodyToReqBuf( pReq ) <= 0 ) in LSAPI_ReqBodyGetChar_r()
1749 ++pReq->m_reqBodyRead; in LSAPI_ReqBodyGetChar_r()
1750 return (unsigned char)*(pReq->m_pReqBuf + pReq->m_bufProcessed++); in LSAPI_ReqBodyGetChar_r()
1754 int LSAPI_ReqBodyGetLine_r( LSAPI_Request * pReq, char * pBuf, size_t bufLen, int *getLF ) in LSAPI_ReqBodyGetLine_r() argument
1762 if (!pReq || pReq->m_fd == -1 || !pBuf || !getLF) in LSAPI_ReqBodyGetLine_r()
1768 len = pReq->m_bufRead - pReq->m_bufProcessed; in LSAPI_ReqBodyGetLine_r()
1771 if ( (len = readBodyToReqBuf( pReq )) <= 0 ) in LSAPI_ReqBodyGetLine_r()
1779 pCur = pReq->m_pReqBuf + pReq->m_bufProcessed; in LSAPI_ReqBodyGetLine_r()
1785 pReq->m_bufProcessed += len; in LSAPI_ReqBodyGetLine_r()
1787 pReq->m_reqBodyRead += len; in LSAPI_ReqBodyGetLine_r()
1801 ssize_t LSAPI_ReadReqBody_r( LSAPI_Request * pReq, char * pBuf, size_t bufLen ) in LSAPI_ReadReqBody_r() argument
1806 if (!pReq || pReq->m_fd == -1 || !pBuf || (ssize_t)bufLen < 0) in LSAPI_ReadReqBody_r()
1809 total = pReq->m_reqBodyLen - pReq->m_reqBodyRead; in LSAPI_ReadReqBody_r()
1817 len = pReq->m_bufRead - pReq->m_bufProcessed; in LSAPI_ReadReqBody_r()
1822 memmove( pBuf, pReq->m_pReqBuf + pReq->m_bufProcessed, len ); in LSAPI_ReadReqBody_r()
1823 pReq->m_bufProcessed += len; in LSAPI_ReadReqBody_r()
1830 len = lsapi_read( pReq->m_fd, pBuf, bufLen ); in LSAPI_ReadReqBody_r()
1844 pReq->m_reqBodyRead += total; in LSAPI_ReadReqBody_r()
1850 ssize_t LSAPI_Write_r( LSAPI_Request * pReq, const char * pBuf, size_t len ) in LSAPI_Write_r() argument
1860 if (!pReq || !pBuf) in LSAPI_Write_r()
1862 if (pReq->m_reqState & LSAPI_ST_BACKGROUND) in LSAPI_Write_r()
1864 if (pReq->m_fd == -1) in LSAPI_Write_r()
1866 if ( pReq->m_reqState & LSAPI_ST_RESP_HEADER ) in LSAPI_Write_r()
1868 LSAPI_FinalizeRespHeaders_r( pReq ); in LSAPI_Write_r()
1880 pReq->m_reqState |= LSAPI_ST_RESP_BODY; in LSAPI_Write_r()
1882 if ( ((ssize_t)len - skip) < pReq->m_pRespBufEnd - pReq->m_pRespBufPos ) in LSAPI_Write_r()
1884 memmove( pReq->m_pRespBufPos, pBuf + skip, len - skip ); in LSAPI_Write_r()
1885 pReq->m_pRespBufPos += len - skip; in LSAPI_Write_r()
1890 pHeader = pReq->m_respPktHeader; in LSAPI_Write_r()
1893 bufLen = pReq->m_pRespBufPos - pReq->m_pRespBuf; in LSAPI_Write_r()
1906 pReq->m_totalLen += packetLen + LSAPI_PACKET_HEADER_LEN; in LSAPI_Write_r()
1908 pReq->m_pIovecCur->iov_base = (void *)pHeader; in LSAPI_Write_r()
1909 pReq->m_pIovecCur->iov_len = LSAPI_PACKET_HEADER_LEN; in LSAPI_Write_r()
1910 ++pReq->m_pIovecCur; in LSAPI_Write_r()
1914 pReq->m_pIovecCur->iov_base = (void *)pReq->m_pRespBuf; in LSAPI_Write_r()
1915 pReq->m_pIovecCur->iov_len = bufLen; in LSAPI_Write_r()
1916 pReq->m_pRespBufPos = pReq->m_pRespBuf; in LSAPI_Write_r()
1917 ++pReq->m_pIovecCur; in LSAPI_Write_r()
1921 pReq->m_pIovecCur->iov_base = (void *)p; in LSAPI_Write_r()
1922 pReq->m_pIovecCur->iov_len = toWrite; in LSAPI_Write_r()
1923 ++pReq->m_pIovecCur; in LSAPI_Write_r()
1926 if ( pHeader >= pReq->m_respPktHeaderEnd - 1) in LSAPI_Write_r()
1928 if ( LSAPI_Flush_r( pReq ) == -1 ) in LSAPI_Write_r()
1930 pHeader = pReq->m_respPktHeader; in LSAPI_Write_r()
1933 if ( pHeader != pReq->m_respPktHeader ) in LSAPI_Write_r()
1934 if ( LSAPI_Flush_r( pReq ) == -1 ) in LSAPI_Write_r()
2011 ssize_t LSAPI_sendfile_r( LSAPI_Request * pReq, int fdIn, off_t* off, size_t size ) in LSAPI_sendfile_r() argument
2013 struct lsapi_packet_header * pHeader = pReq->m_respPktHeader; in LSAPI_sendfile_r()
2014 if ( !pReq || (pReq->m_fd == -1) || fdIn == -1 ) in LSAPI_sendfile_r()
2016 if ( pReq->m_reqState & LSAPI_ST_RESP_HEADER ) in LSAPI_sendfile_r()
2018 LSAPI_FinalizeRespHeaders_r( pReq ); in LSAPI_sendfile_r()
2020 pReq->m_reqState |= LSAPI_ST_RESP_BODY; in LSAPI_sendfile_r()
2022 LSAPI_Flush_r(pReq); in LSAPI_sendfile_r()
2028 …if (write(pReq->m_fd, (const char *) pHeader, LSAPI_PACKET_HEADER_LEN ) != LSAPI_PACKET_HEADER_LE… in LSAPI_sendfile_r()
2031 return gsendfile( pReq->m_fd, fdIn, off, size ); in LSAPI_sendfile_r()
2035 void Flush_RespBuf_r( LSAPI_Request * pReq ) in Flush_RespBuf_r() argument
2037 struct lsapi_packet_header * pHeader = pReq->m_respPktHeader; in Flush_RespBuf_r()
2038 int bufLen = pReq->m_pRespBufPos - pReq->m_pRespBuf; in Flush_RespBuf_r()
2039 pReq->m_reqState |= LSAPI_ST_RESP_BODY; in Flush_RespBuf_r()
2042 pReq->m_totalLen += bufLen + LSAPI_PACKET_HEADER_LEN; in Flush_RespBuf_r()
2044 pReq->m_pIovecCur->iov_base = (void *)pHeader; in Flush_RespBuf_r()
2045 pReq->m_pIovecCur->iov_len = LSAPI_PACKET_HEADER_LEN; in Flush_RespBuf_r()
2046 ++pReq->m_pIovecCur; in Flush_RespBuf_r()
2050 pReq->m_pIovecCur->iov_base = (void *)pReq->m_pRespBuf; in Flush_RespBuf_r()
2051 pReq->m_pIovecCur->iov_len = bufLen; in Flush_RespBuf_r()
2052 pReq->m_pRespBufPos = pReq->m_pRespBuf; in Flush_RespBuf_r()
2053 ++pReq->m_pIovecCur; in Flush_RespBuf_r()
2059 int LSAPI_Flush_r( LSAPI_Request * pReq ) in LSAPI_Flush_r() argument
2063 if ( !pReq ) in LSAPI_Flush_r()
2065 n = pReq->m_pIovecCur - pReq->m_pIovecToWrite; in LSAPI_Flush_r()
2066 if (( 0 == n )&&( pReq->m_pRespBufPos == pReq->m_pRespBuf )) in LSAPI_Flush_r()
2068 if ( pReq->m_fd == -1 ) in LSAPI_Flush_r()
2070 pReq->m_pRespBufPos = pReq->m_pRespBuf; in LSAPI_Flush_r()
2071 pReq->m_totalLen = 0; in LSAPI_Flush_r()
2072 pReq->m_pIovecCur = pReq->m_pIovecToWrite = pReq->m_pIovec; in LSAPI_Flush_r()
2075 if ( pReq->m_reqState & LSAPI_ST_RESP_HEADER ) in LSAPI_Flush_r()
2077 LSAPI_FinalizeRespHeaders_r( pReq ); in LSAPI_Flush_r()
2079 if ( pReq->m_pRespBufPos != pReq->m_pRespBuf ) in LSAPI_Flush_r()
2081 Flush_RespBuf_r( pReq ); in LSAPI_Flush_r()
2084 n = pReq->m_pIovecCur - pReq->m_pIovecToWrite; in LSAPI_Flush_r()
2088 ret = lsapi_writev( pReq->m_fd, &pReq->m_pIovecToWrite, in LSAPI_Flush_r()
2089 n, pReq->m_totalLen ); in LSAPI_Flush_r()
2090 if ( ret < pReq->m_totalLen ) in LSAPI_Flush_r()
2092 lsapi_close_connection(pReq); in LSAPI_Flush_r()
2095 pReq->m_totalLen = 0; in LSAPI_Flush_r()
2096 pReq->m_pIovecCur = pReq->m_pIovecToWrite = pReq->m_pIovec; in LSAPI_Flush_r()
2102 ssize_t LSAPI_Write_Stderr_r( LSAPI_Request * pReq, const char * pBuf, size_t len ) in LSAPI_Write_Stderr_r() argument
2113 if ( !pReq ) in LSAPI_Write_Stderr_r()
2115 if (s_stderr_log_path || pReq->m_fd == -1 || pReq->m_fd == pReq->m_fdListen) in LSAPI_Write_Stderr_r()
2117 if ( pReq->m_pRespBufPos != pReq->m_pRespBuf ) in LSAPI_Write_Stderr_r()
2119 LSAPI_Flush_r( pReq ); in LSAPI_Write_Stderr_r()
2143 ret = lsapi_writev( pReq->m_fd, &pIov, in LSAPI_Write_Stderr_r()
2147 lsapi_close_connection(pReq); in LSAPI_Write_Stderr_r()
2155 static char * GetHeaderVar( LSAPI_Request * pReq, const char * name ) in GetHeaderVar() argument
2161 if ( pReq->m_pHeaderIndex->m_headerOff[i] ) in GetHeaderVar()
2165 pValue = pReq->m_pHttpHeader in GetHeaderVar()
2166 + pReq->m_pHeaderIndex->m_headerOff[i]; in GetHeaderVar()
2167 if ( *(pValue + pReq->m_pHeaderIndex->m_headerLen[i]) != '\0') in GetHeaderVar()
2169 *(pValue + pReq->m_pHeaderIndex->m_headerLen[i]) = '\0'; in GetHeaderVar()
2175 if ( pReq->m_pHeader->m_cntUnknownHeaders > 0 ) in GetHeaderVar()
2182 pCur = pReq->m_pUnknownHeader; in GetHeaderVar()
2183 pEnd = pCur + pReq->m_pHeader->m_cntUnknownHeaders; in GetHeaderVar()
2186 pKey = pReq->m_pHttpHeader + pCur->nameOff; in GetHeaderVar()
2200 pValue = pReq->m_pHttpHeader + pCur->valueOff; in GetHeaderVar()
2215 char * LSAPI_GetEnv_r( LSAPI_Request * pReq, const char * name ) in LSAPI_GetEnv_r() argument
2217 struct LSAPI_key_value_pair * pBegin = pReq->m_pEnvList; in LSAPI_GetEnv_r()
2218 struct LSAPI_key_value_pair * pEnd = pBegin + pReq->m_pHeader->m_cntEnv; in LSAPI_GetEnv_r()
2219 if ( !pReq || !name ) in LSAPI_GetEnv_r()
2223 return GetHeaderVar( pReq, name ); in LSAPI_GetEnv_r()
2251 int LSAPI_ForeachOrgHeader_r( LSAPI_Request * pReq, in LSAPI_ForeachOrgHeader_r() argument
2261 if ( !pReq || !fn ) in LSAPI_ForeachOrgHeader_r()
2264 if ( !pReq->m_pHeaderIndex ) in LSAPI_ForeachOrgHeader_r()
2269 if ( pReq->m_pHeaderIndex->m_headerOff[i] ) in LSAPI_ForeachOrgHeader_r()
2271 len = pReq->m_pHeaderIndex->m_headerLen[i]; in LSAPI_ForeachOrgHeader_r()
2272 pValue = pReq->m_pHttpHeader + pReq->m_pHeaderIndex->m_headerOff[i]; in LSAPI_ForeachOrgHeader_r()
2286 if ( pReq->m_pHeader->m_cntUnknownHeaders > 0 ) in LSAPI_ForeachOrgHeader_r()
2291 pCur = pReq->m_pUnknownHeader; in LSAPI_ForeachOrgHeader_r()
2292 pEnd = pCur + pReq->m_pHeader->m_cntUnknownHeaders; in LSAPI_ForeachOrgHeader_r()
2295 pKey = pReq->m_pHttpHeader + pCur->nameOff; in LSAPI_ForeachOrgHeader_r()
2299 pValue = pReq->m_pHttpHeader + pCur->valueOff; in LSAPI_ForeachOrgHeader_r()
2327 int LSAPI_ForeachHeader_r( LSAPI_Request * pReq, in LSAPI_ForeachHeader_r() argument
2335 if ( !pReq || !fn ) in LSAPI_ForeachHeader_r()
2339 if ( pReq->m_pHeaderIndex->m_headerOff[i] ) in LSAPI_ForeachHeader_r()
2341 len = pReq->m_pHeaderIndex->m_headerLen[i]; in LSAPI_ForeachHeader_r()
2342 pValue = pReq->m_pHttpHeader + pReq->m_pHeaderIndex->m_headerOff[i]; in LSAPI_ForeachHeader_r()
2351 if ( pReq->m_pHeader->m_cntUnknownHeaders > 0 ) in LSAPI_ForeachHeader_r()
2359 pCur = pReq->m_pUnknownHeader; in LSAPI_ForeachHeader_r()
2360 pEnd = pCur + pReq->m_pHeader->m_cntUnknownHeaders; in LSAPI_ForeachHeader_r()
2363 pKey = pReq->m_pHttpHeader + pCur->nameOff; in LSAPI_ForeachHeader_r()
2382 pValue = pReq->m_pHttpHeader + pCur->valueOff; in LSAPI_ForeachHeader_r()
2391 return count + pReq->m_pHeader->m_cntUnknownHeaders; in LSAPI_ForeachHeader_r()
2414 int LSAPI_ForeachEnv_r( LSAPI_Request * pReq, in LSAPI_ForeachEnv_r() argument
2417 if ( !pReq || !fn ) in LSAPI_ForeachEnv_r()
2419 if ( pReq->m_pHeader->m_cntEnv > 0 ) in LSAPI_ForeachEnv_r()
2421 return EnvForeach( pReq->m_pEnvList, pReq->m_pHeader->m_cntEnv, in LSAPI_ForeachEnv_r()
2428 int LSAPI_ForeachSpecialEnv_r( LSAPI_Request * pReq, in LSAPI_ForeachSpecialEnv_r() argument
2431 if ( !pReq || !fn ) in LSAPI_ForeachSpecialEnv_r()
2433 if ( pReq->m_pHeader->m_cntSpecialEnv > 0 ) in LSAPI_ForeachSpecialEnv_r()
2435 return EnvForeach( pReq->m_pSpecialEnvList, in LSAPI_ForeachSpecialEnv_r()
2436 pReq->m_pHeader->m_cntSpecialEnv, in LSAPI_ForeachSpecialEnv_r()
2444 int LSAPI_FinalizeRespHeaders_r( LSAPI_Request * pReq ) in LSAPI_FinalizeRespHeaders_r() argument
2446 if ( !pReq || !pReq->m_pIovec ) in LSAPI_FinalizeRespHeaders_r()
2448 if ( !( pReq->m_reqState & LSAPI_ST_RESP_HEADER ) ) in LSAPI_FinalizeRespHeaders_r()
2450 pReq->m_reqState &= ~LSAPI_ST_RESP_HEADER; in LSAPI_FinalizeRespHeaders_r()
2451 if ( pReq->m_pRespHeaderBufPos > pReq->m_pRespHeaderBuf ) in LSAPI_FinalizeRespHeaders_r()
2453 pReq->m_pIovecCur->iov_base = (void *)pReq->m_pRespHeaderBuf; in LSAPI_FinalizeRespHeaders_r()
2454 pReq->m_pIovecCur->iov_len = pReq->m_pRespHeaderBufPos - pReq->m_pRespHeaderBuf; in LSAPI_FinalizeRespHeaders_r()
2455 pReq->m_totalLen += pReq->m_pIovecCur->iov_len; in LSAPI_FinalizeRespHeaders_r()
2456 ++pReq->m_pIovecCur; in LSAPI_FinalizeRespHeaders_r()
2459 pReq->m_pIovec->iov_len = sizeof( struct lsapi_resp_header) in LSAPI_FinalizeRespHeaders_r()
2460 + pReq->m_respHeader.m_respInfo.m_cntHeaders * sizeof( short ); in LSAPI_FinalizeRespHeaders_r()
2461 pReq->m_totalLen += pReq->m_pIovec->iov_len; in LSAPI_FinalizeRespHeaders_r()
2463 lsapi_buildPacketHeader( &pReq->m_respHeader.m_pktHeader, in LSAPI_FinalizeRespHeaders_r()
2464 LSAPI_RESP_HEADER, pReq->m_totalLen ); in LSAPI_FinalizeRespHeaders_r()
2465 pReq->m_pIovec->iov_base = (void *)&pReq->m_respHeader; in LSAPI_FinalizeRespHeaders_r()
2466 pReq->m_pIovecToWrite = pReq->m_pIovec; in LSAPI_FinalizeRespHeaders_r()
2471 int LSAPI_AppendRespHeader2_r( LSAPI_Request * pReq, const char * pHeaderName, in LSAPI_AppendRespHeader2_r() argument
2475 if ( !pReq || !pHeaderName || !pHeaderValue ) in LSAPI_AppendRespHeader2_r()
2477 if ( pReq->m_reqState & LSAPI_ST_RESP_BODY ) in LSAPI_AppendRespHeader2_r()
2479 if ( pReq->m_respHeader.m_respInfo.m_cntHeaders >= LSAPI_MAX_RESP_HEADERS ) in LSAPI_AppendRespHeader2_r()
2507 if ( pReq->m_pRespHeaderBufPos + len + 1 > pReq->m_pRespHeaderBufEnd ) in LSAPI_AppendRespHeader2_r()
2509 int newlen = pReq->m_pRespHeaderBufPos + len + 4096 - pReq->m_pRespHeaderBuf; in LSAPI_AppendRespHeader2_r()
2511 if ( allocateRespHeaderBuf( pReq, newlen ) == -1 ) in LSAPI_AppendRespHeader2_r()
2514 memmove( pReq->m_pRespHeaderBufPos, pHeaderName, nameLen ); in LSAPI_AppendRespHeader2_r()
2515 pReq->m_pRespHeaderBufPos += nameLen; in LSAPI_AppendRespHeader2_r()
2516 *pReq->m_pRespHeaderBufPos++ = ':'; in LSAPI_AppendRespHeader2_r()
2517 memmove( pReq->m_pRespHeaderBufPos, pHeaderValue, valLen ); in LSAPI_AppendRespHeader2_r()
2518 pReq->m_pRespHeaderBufPos += valLen; in LSAPI_AppendRespHeader2_r()
2519 *pReq->m_pRespHeaderBufPos++ = 0; in LSAPI_AppendRespHeader2_r()
2521 pReq->m_respHeaderLen[pReq->m_respHeader.m_respInfo.m_cntHeaders] = len; in LSAPI_AppendRespHeader2_r()
2522 ++pReq->m_respHeader.m_respInfo.m_cntHeaders; in LSAPI_AppendRespHeader2_r()
2527 int LSAPI_AppendRespHeader_r( LSAPI_Request * pReq, const char * pBuf, int len ) in LSAPI_AppendRespHeader_r() argument
2529 if ( !pReq || !pBuf || len <= 0 || len > LSAPI_RESP_HTTP_HEADER_MAX ) in LSAPI_AppendRespHeader_r()
2531 if ( pReq->m_reqState & LSAPI_ST_RESP_BODY ) in LSAPI_AppendRespHeader_r()
2533 if ( pReq->m_respHeader.m_respInfo.m_cntHeaders >= LSAPI_MAX_RESP_HEADERS ) in LSAPI_AppendRespHeader_r()
2545 if ( pReq->m_pRespHeaderBufPos + len + 1 > pReq->m_pRespHeaderBufEnd ) in LSAPI_AppendRespHeader_r()
2547 int newlen = pReq->m_pRespHeaderBufPos + len + 4096 - pReq->m_pRespHeaderBuf; in LSAPI_AppendRespHeader_r()
2549 if ( allocateRespHeaderBuf( pReq, newlen ) == -1 ) in LSAPI_AppendRespHeader_r()
2552 memmove( pReq->m_pRespHeaderBufPos, pBuf, len ); in LSAPI_AppendRespHeader_r()
2553 pReq->m_pRespHeaderBufPos += len; in LSAPI_AppendRespHeader_r()
2554 *pReq->m_pRespHeaderBufPos++ = 0; in LSAPI_AppendRespHeader_r()
2556 pReq->m_respHeaderLen[pReq->m_respHeader.m_respInfo.m_cntHeaders] = len; in LSAPI_AppendRespHeader_r()
2557 ++pReq->m_respHeader.m_respInfo.m_cntHeaders; in LSAPI_AppendRespHeader_r()
3117 LSAPI_Request * pReq ) in lsapi_prefork_server_accept() argument
3229 pReq->m_fd = lsapi_accept( pServer->m_fd ); in lsapi_prefork_server_accept()
3230 if ( pReq->m_fd != -1 ) in lsapi_prefork_server_accept()
3264 lsapi_set_nblock( pReq->m_fd, 0 ); in lsapi_prefork_server_accept()
3270 && pReq->m_fdListen != -1 ) in lsapi_prefork_server_accept()
3272 close( pReq->m_fdListen ); in lsapi_prefork_server_accept()
3273 pReq->m_fdListen = -1; in lsapi_prefork_server_accept()
3282 lsapi_notify_pid( pReq->m_fd ); in lsapi_prefork_server_accept()
3302 close( pReq->m_fd ); in lsapi_prefork_server_accept()
3303 pReq->m_fd = -1; in lsapi_prefork_server_accept()
3329 int LSAPI_Postfork_Child(LSAPI_Request * pReq) in LSAPI_Postfork_Child() argument
3333 __sync_lock_test_and_set(&pReq->child_status->m_pid, s_pid); in LSAPI_Postfork_Child()
3334 s_worker_status = pReq->child_status; in LSAPI_Postfork_Child()
3349 lsapi_set_nblock( pReq->m_fd, 0 ); in LSAPI_Postfork_Child()
3355 && pReq->m_fdListen != -1 ) in LSAPI_Postfork_Child()
3357 close(pReq->m_fdListen); in LSAPI_Postfork_Child()
3358 pReq->m_fdListen = -1; in LSAPI_Postfork_Child()
3362 lsapi_notify_pid(pReq->m_fd); in LSAPI_Postfork_Child()
3370 int LSAPI_Postfork_Parent(LSAPI_Request * pReq) in LSAPI_Postfork_Parent() argument
3373 if (pReq->child_status) in LSAPI_Postfork_Parent()
3376 pReq->child_status->m_tmWaitBegin = curTime; in LSAPI_Postfork_Parent()
3377 pReq->child_status->m_tmStart = curTime; in LSAPI_Postfork_Parent()
3379 close(pReq->m_fd); in LSAPI_Postfork_Parent()
3380 pReq->m_fd = -1; in LSAPI_Postfork_Parent()
3385 int LSAPI_Accept_Before_Fork(LSAPI_Request * pReq) in LSAPI_Accept_Before_Fork() argument
3422 pReq->m_reqState = 0; in LSAPI_Accept_Before_Fork()
3500 pReq->m_fd = lsapi_accept(pServer->m_fd); in LSAPI_Accept_Before_Fork()
3501 if (pReq->m_fd != -1) in LSAPI_Accept_Before_Fork()
3504 pReq->child_status = find_child_status(0); in LSAPI_Accept_Before_Fork()
3536 int LSAPI_Prefork_Accept_r( LSAPI_Request * pReq ) in LSAPI_Prefork_Accept_r() argument
3547 LSAPI_Finish_r( pReq ); in LSAPI_Prefork_Accept_r()
3552 if ( lsapi_prefork_server_accept( g_prefork_server, pReq ) == -1 ) in LSAPI_Prefork_Accept_r()
3560 send_conn_close_notification(pReq->m_fd); in LSAPI_Prefork_Accept_r()
3561 lsapi_close_connection(pReq); in LSAPI_Prefork_Accept_r()
3576 if ( pReq->m_fd != -1 ) in LSAPI_Prefork_Accept_r()
3578 fd = pReq->m_fd; in LSAPI_Prefork_Accept_r()
3580 else if ( pReq->m_fdListen != -1 ) in LSAPI_Prefork_Accept_r()
3581 fd = pReq->m_fdListen; in LSAPI_Prefork_Accept_r()
3598 if (fd == pReq->m_fdListen) in LSAPI_Prefork_Accept_r()
3607 if (fd == pReq->m_fdListen) in LSAPI_Prefork_Accept_r()
3621 if (fd == pReq->m_fdListen in LSAPI_Prefork_Accept_r()
3643 if ( fd == pReq->m_fdListen ) in LSAPI_Prefork_Accept_r()
3645 pReq->m_fd = lsapi_accept( pReq->m_fdListen ); in LSAPI_Prefork_Accept_r()
3646 if ( pReq->m_fd != -1 ) in LSAPI_Prefork_Accept_r()
3654 fd = pReq->m_fd; in LSAPI_Prefork_Accept_r()
3660 close( pReq->m_fdListen ); in LSAPI_Prefork_Accept_r()
3661 pReq->m_fdListen = -1; in LSAPI_Prefork_Accept_r()
3664 if ( notify_req_received( pReq->m_fd ) == -1 ) in LSAPI_Prefork_Accept_r()
3680 if ( !readReq( pReq ) ) in LSAPI_Prefork_Accept_r()
3693 lsapi_close_connection(pReq); in LSAPI_Prefork_Accept_r()
3694 LSAPI_Reset_r( pReq ); in LSAPI_Prefork_Accept_r()
4064 int LSAPI_ErrResponse_r( LSAPI_Request * pReq, int code, const char ** pRespHeaders, in LSAPI_ErrResponse_r() argument
4067 LSAPI_SetRespStatus_r( pReq, code ); in LSAPI_ErrResponse_r()
4072 LSAPI_AppendRespHeader_r( pReq, *pRespHeaders, strlen( *pRespHeaders ) ); in LSAPI_ErrResponse_r()
4078 LSAPI_Write_r( pReq, pBody, bodyLen ); in LSAPI_ErrResponse_r()
4080 LSAPI_Finish_r( pReq ); in LSAPI_ErrResponse_r()