Esempio n. 1
0
void HttpMessage::addHeader(const char* name, int32_t szName, const char* value,
    int32_t szValue)
{
    if (szName == 10 && !qstricmp(name, "connection", szName)) {
        if (qstristr(value, "upgrade")) {
            m_upgrade = true;
            m_keepAlive = true;
        } else
            m_keepAlive = !!qstristr(value, "keep-alive");
    } else
        m_headers->add(name, szName, value, szValue);
}
Esempio n. 2
0
        asyncInvoke(HttpFileHandler *pThis, HttpRequest_base *req,
                    exlib::AsyncEvent *ac) :
            asyncState(ac), m_pThis(pThis), m_req(req), m_gzip(false)
        {
            req->get_response(m_rep);

            Variant hdr;

            if (m_req->firstHeader("Accept-Encoding", hdr) != CALL_RETURN_NULL)
            {
                std::string str = hdr.string();

                if (qstristr(str.c_str(), "gzip"))
                    m_gzip = true;
            }

            std::string value;

            m_req->get_value(value);

            Url::decodeURI(value.c_str(), (int) value.length(), value);

            if (value.length() > 0 && isPathSlash(value[value.length() - 1]))
                value.append("index.html", 10);

            path_base::normalize((m_pThis->m_root + value).c_str(), m_url);

            set(start);
        }
Esempio n. 3
0
        asyncInvoke(HttpFileHandler* pThis, HttpRequest_base* req, bool autoIndex,
            AsyncEvent* ac)
            : AsyncState(ac)
            , m_pThis(pThis)
            , m_req(req)
            , m_autoIndex(autoIndex)
            , m_pre_gz(false)
            , m_index(false)
            , m_dirPos(0)
        {
            req->get_response(m_rep);

            Variant hdr;

            if (m_req->firstHeader("Accept-Encoding", hdr) != CALL_RETURN_NULL) {
                exlib::string str = hdr.string();

                if (qstristr(str.c_str(), "gzip"))
                    m_pre_gz = true;
            }

            m_req->get_value(m_value);
            Url::decodeURI(m_value, m_value);
            path_base::normalize(m_pThis->m_root + m_value, m_url);

            set(start);
        }
Esempio n. 4
0
result_t XmlDocument::load(Buffer_base *source)
{
    std::string strBuf;
    result_t hr;

    source->toString(strBuf);

    if (!m_isXml)
    {
        _parser p(strBuf);
        const char *ptr;

        while ((ptr = qstristr(p.now(), "<meta")) != NULL && qisspace(ptr[5]))
        {
            bool bContentType = false;
            std::string content;

            p.pos = (int32_t)(ptr - p.string + 5);
            while (true)
            {
                std::string key, value;

                p.skipSpace();
                p.getWord(key, '=', '>');

                if (key.empty())
                    break;

                if (p.want('='))
                {
                    if (p.want('\"'))
                    {
                        p.getString(value, '\"', '>');
                        p.want('\"');
                    }
                    else
                        p.getWord(value, '>');
                }

                if (!qstricmp(key.c_str(), "charset"))
                {
                    m_encoding = value;
                    break;
                }
                else if (!qstricmp(key.c_str(), "content"))
                    content = value;
                else if (!qstricmp(key.c_str(), "http-equiv") &&
                         !qstricmp(value.c_str(), "Content-Type"))
                    bContentType = true;
            }

            if (bContentType && !content.empty())
            {
                _parser p1(content);

                while (true)
                {
                    std::string key, value;

                    p1.skipSpace();
                    p1.getWord(key, ';', '=');

                    if (key.empty())
                        break;

                    if (p1.want('='))
                        p1.getWord(value, ';');

                    p1.want(';');

                    if (!qstricmp(key.c_str(), "charset"))
                    {
                        m_encoding = value;
                        break;
                    }
                }
            }

            if (!m_encoding.empty())
                break;
        }

        if (!m_encoding.empty())
        {
            encoding_iconv conv(m_encoding.c_str());
            conv.decode(strBuf, strBuf);
        }
    }

    hr = load(strBuf.c_str());
    if (hr < 0)
        return hr;

    return 0;
}