当前位置: 首页>>代码示例>>C++>>正文


C++ HttpReq::getEnvByIndex方法代码示例

本文整理汇总了C++中HttpReq::getEnvByIndex方法的典型用法代码示例。如果您正苦于以下问题:C++ HttpReq::getEnvByIndex方法的具体用法?C++ HttpReq::getEnvByIndex怎么用?C++ HttpReq::getEnvByIndex使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在HttpReq的用法示例。


在下文中一共展示了HttpReq::getEnvByIndex方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: buildCommonEnv

int HttpCgiTool::buildCommonEnv( IEnv * pEnv, HttpConnection * pConn )
{
    int count = 0;
    HttpReq * pReq = pConn->getReq();
    const char * pTemp;
    int n;
    int i;
    char buf[128];

    pTemp = pReq->getAuthUser();
    if (  *pTemp )
    {
        //FIXME: only Basic is support now
        pEnv->add( "AUTH_TYPE", 9, "Basic", 5 );
        pEnv->add( "REMOTE_USER", 11, pTemp, strlen( pTemp ) );
        count += 2;
    }
    //ADD_ENV("REMOTE_IDENT", "" )        //FIXME: not supported yet
    //extensions of CGI/1.1
    const AutoStr2 * pDocRoot = pReq->getDocRoot();
    pEnv->add( "DOCUMENT_ROOT", 13,
            pDocRoot->c_str(), pDocRoot->len()-1 );
    pEnv->add( "REMOTE_ADDR", 11, pConn->getPeerAddrString(),
            pConn->getPeerAddrStrLen() );
    
    n = safe_snprintf( buf, 10, "%hu", pConn->getRemotePort() );
    pEnv->add( "REMOTE_PORT", 11, buf, n );

    n = pConn->getServerAddrStr( buf, 128 );
    
    pEnv->add( "SERVER_ADDR", 11, buf, n );
    
    pEnv->add( "SERVER_NAME", 11, pReq->getHostStr(),  pReq->getHostStrLen() );
    const AutoStr2 &sPort = pReq->getPortStr();
    pEnv->add( "SERVER_PORT", 11, sPort.c_str(), sPort.len() );
    pEnv->add( "REQUEST_URI", 11, pReq->getOrgReqURL(), pReq->getOrgReqURLLen() );
    count += 7;
    
    n = pReq->getPathInfoLen();
    if ( n > 0)
    {
        int m;
        char achTranslated[10240];
        m =  pReq->translatePath( pReq->getPathInfo(), n,
                        achTranslated, sizeof( achTranslated ) );
        if ( m != -1 );
        {
            pEnv->add( "PATH_TRANSLATED", 15, achTranslated, m );
            ++count;
        }
        pEnv->add( "PATH_INFO", 9, pReq->getPathInfo(), n);
        ++count;
    }
    
    //add geo IP env here
    if ( pReq->isGeoIpOn() )
    {
        GeoInfo * pInfo = pConn->getClientInfo()->getGeoInfo();
        if ( pInfo )
        {
            pEnv->add( "GEOIP_ADDR", 10, pConn->getPeerAddrString(),
                    pConn->getPeerAddrStrLen() );
            count += pInfo->addGeoEnv( pEnv )+1;
        }
    }    

    n = pReq->getEnvCount();
    count += n;
    for( i = 0; i < n; ++i )
    {
        const char * pKey;
        const char * pVal;
        int keyLen;
        int valLen;
        pKey = pReq->getEnvByIndex( i, keyLen, pVal, valLen );
        if ( pKey )
            pEnv->add( pKey, keyLen, pVal, valLen );
    }
    
    if ( pConn->isSSL() )
    {
        SSLConnection * pSSL = pConn->getSSL();
        pEnv->add( "HTTPS", 5, "on",  2 );
        const char * pVersion = pSSL->getVersion();
        n = strlen( pVersion );
        pEnv->add( "SSL_VERSION", 11, pVersion, n );
        count += 2;
        SSL_SESSION * pSession = pSSL->getSession();
        if ( pSession )
        {
            int idLen = SSLConnection::getSessionIdLen( pSession );
            n = idLen * 2;
            assert( n < (int)sizeof( buf ) );
            StringTool::hexEncode(
                (char *)SSLConnection::getSessionId( pSession ),
                idLen, buf );
            pEnv->add( "SSL_SESSION_ID", 14, buf, n );
            ++count;
        }

//.........这里部分代码省略.........
开发者ID:DSpeichert,项目名称:OpenLiteSpeed,代码行数:101,代码来源:httpcgitool.cpp


注:本文中的HttpReq::getEnvByIndex方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。