diff options
author | Allan Sandfeld Jensen <allan.jensen@digia.com> | 2013-09-13 12:51:20 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-09-19 20:50:05 +0200 |
commit | d441d6f39bb846989d95bcf5caf387b42414718d (patch) | |
tree | e367e64a75991c554930278175d403c072de6bb8 /Source/WebKit2/UIProcess/InspectorServer/HTTPRequest.cpp | |
parent | 0060b2994c07842f4c59de64b5e3e430525c4b90 (diff) | |
download | qtwebkit-d441d6f39bb846989d95bcf5caf387b42414718d.tar.gz |
Import Qt5x2 branch of QtWebkit for Qt 5.2
Importing a new snapshot of webkit.
Change-Id: I2d01ad12cdc8af8cb015387641120a9d7ea5f10c
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@digia.com>
Diffstat (limited to 'Source/WebKit2/UIProcess/InspectorServer/HTTPRequest.cpp')
-rw-r--r-- | Source/WebKit2/UIProcess/InspectorServer/HTTPRequest.cpp | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/Source/WebKit2/UIProcess/InspectorServer/HTTPRequest.cpp b/Source/WebKit2/UIProcess/InspectorServer/HTTPRequest.cpp new file mode 100644 index 000000000..734926c6c --- /dev/null +++ b/Source/WebKit2/UIProcess/InspectorServer/HTTPRequest.cpp @@ -0,0 +1,120 @@ +/* + * Copyright (C) 2011 Apple Inc. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "config.h" +#include "HTTPRequest.h" + +#include <wtf/text/CString.h> + +using namespace WebCore; + +namespace WebKit { + +PassRefPtr<HTTPRequest> HTTPRequest::parseHTTPRequestFromBuffer(const char* data, size_t length, String& failureReason) +{ + if (!length) { + failureReason = "No data to parse."; + return 0; + } + + // Request we will be building. + RefPtr<HTTPRequest> request = HTTPRequest::create(); + + // Advance a pointer through the data as needed. + const char* pos = data; + size_t remainingLength = length; + + // 1. Parse Method + URL. + size_t requestLineLength = request->parseRequestLine(pos, remainingLength, failureReason); + if (!requestLineLength) + return 0; + pos += requestLineLength; + remainingLength -= requestLineLength; + + // 2. Parse HTTP Headers. + size_t headersLength = request->parseHeaders(pos, remainingLength, failureReason); + if (!headersLength) + return 0; + pos += headersLength; + remainingLength -= headersLength; + + // 3. Parse HTTP Data. + size_t dataLength = request->parseRequestBody(pos, remainingLength); + pos += dataLength; + remainingLength -= dataLength; + + // We should have processed the entire input. + ASSERT(!remainingLength); + return request.release(); +} + +size_t HTTPRequest::parseRequestLine(const char* data, size_t length, String& failureReason) +{ + String url; + size_t result = parseHTTPRequestLine(data, length, failureReason, m_requestMethod, url, m_httpVersion); + m_url = KURL(KURL(), url); + return result; +} + +size_t HTTPRequest::parseHeaders(const char* data, size_t length, String& failureReason) +{ + const char* p = data; + const char* end = data + length; + AtomicString name; + String value; + for (; p < data + length; p++) { + size_t consumedLength = parseHTTPHeader(p, end - p, failureReason, name, value); + if (!consumedLength) + return 0; + p += consumedLength; + if (name.isEmpty()) + break; + m_headerFields.add(name, value); + } + return p - data; +} + +size_t HTTPRequest::parseRequestBody(const char* data, size_t length) +{ + return parseHTTPRequestBody(data, length, m_body); +} + +HTTPRequest::HTTPRequest() + : m_httpVersion(WebCore::Unknown) +{ +} + +HTTPRequest::HTTPRequest(const String& requestMethod, const KURL& url, HTTPVersion version) + : m_url(url) + , m_httpVersion(version) + , m_requestMethod(requestMethod) +{ +} + +HTTPRequest::~HTTPRequest() +{ +} + +} // namespace WebCore |