diff --git a/src/core/httprequest.h b/src/core/httprequest.h index 4d2920c0..9111a8c2 100644 --- a/src/core/httprequest.h +++ b/src/core/httprequest.h @@ -24,6 +24,8 @@ #ifndef HTTPREQUEST_H #define HTTPREQUEST_H +#include "cowbytearray.h" +#include "cowstring.h" #include "cowurl.h" #include "httpheaders.h" #include @@ -51,19 +53,20 @@ class HttpRequest { virtual QHostAddress peerAddress() const = 0; - virtual void setConnectHost(const QString &host) = 0; + virtual void setConnectHost(const CowString &host) = 0; virtual void setConnectPort(int port) = 0; virtual void setIgnorePolicies(bool on) = 0; virtual void setTrustConnectHost(bool on) = 0; virtual void setIgnoreTlsErrors(bool on) = 0; virtual void setTimeout(int msecs) = 0; - virtual void setClientCert(const QString &cert, const QString &key) = 0; + virtual void setClientCert(const CowString &cert, const CowString &key) = 0; - virtual void start(const QString &method, const CowUrl &uri, const HttpHeaders &headers) = 0; - virtual void beginResponse(int code, const QByteArray &reason, const HttpHeaders &headers) = 0; + virtual void start(const CowString &method, const CowUrl &uri, const HttpHeaders &headers) = 0; + virtual void beginResponse(int code, const CowByteArray &reason, + const HttpHeaders &headers) = 0; // May call this multiple times - virtual void writeBody(const QByteArray &body) = 0; + virtual void writeBody(const CowByteArray &body) = 0; virtual void endBody() = 0; @@ -75,15 +78,15 @@ class HttpRequest { virtual bool isErrored() const = 0; virtual ErrorCondition errorCondition() const = 0; - virtual QString requestMethod() const = 0; + virtual CowString requestMethod() const = 0; virtual CowUrl requestUri() const = 0; virtual HttpHeaders requestHeaders() const = 0; virtual int responseCode() const = 0; - virtual QByteArray responseReason() const = 0; + virtual CowByteArray responseReason() const = 0; virtual HttpHeaders responseHeaders() const = 0; - virtual QByteArray readBody(int size = -1) = 0; // Takes from the buffer + virtual CowByteArray readBody(int size = -1) = 0; // Takes from the buffer // Indicates input data and/or input finished Signal readyRead; diff --git a/src/core/zhttprequest.cpp b/src/core/zhttprequest.cpp index 85c6a9c1..dbe3bf17 100644 --- a/src/core/zhttprequest.cpp +++ b/src/core/zhttprequest.cpp @@ -66,17 +66,17 @@ class ZhttpRequest::Private { bool doReq; QByteArray toAddress; QHostAddress peerAddress; - QString connectHost; + CowString connectHost; int connectPort; bool ignorePolicies; bool trustConnectHost; bool ignoreTlsErrors; int timeout; - QString clientCert; - QString clientKey; + CowString clientCert; + CowString clientKey; bool sendBodyAfterAck; Variant passthrough; - QString requestMethod; + CowString requestMethod; CowUrl requestUri; HttpHeaders requestHeaders; BufferList requestBodyBuf; @@ -88,7 +88,7 @@ class ZhttpRequest::Private { bool haveRequestBody; bool haveResponseValues; int responseCode; - QByteArray responseReason; + CowByteArray responseReason; HttpHeaders responseHeaders; BufferList responseBodyBuf; Variant userData; @@ -202,10 +202,10 @@ class ZhttpRequest::Private { if (packet.credits != -1) outCredits = packet.credits; - requestMethod = packet.method.asQString(); + requestMethod = packet.method; requestUri = packet.uri; requestHeaders = packet.headers; - requestBodyBuf += packet.body.asQByteArray(); + requestBodyBuf += packet.body; passthrough = packet.passthrough; @@ -342,7 +342,7 @@ class ZhttpRequest::Private { } } - QByteArray readBody(int size) { + CowByteArray readBody(int size) { if (server) { QByteArray out = requestBodyBuf.take(size).asQByteArray(); if (out.isEmpty()) @@ -526,7 +526,7 @@ class ZhttpRequest::Private { refreshTimeout(); if (packet.type == ZhttpRequestPacket::Data) { - requestBodyBuf += packet.body.asQByteArray(); + requestBodyBuf += packet.body; bool done = haveRequestBody; @@ -664,7 +664,7 @@ class ZhttpRequest::Private { haveResponseValues = true; responseCode = packet.code; - responseReason = packet.reason.asQByteArray(); + responseReason = packet.reason; responseHeaders = packet.headers; needToSendHeaders = true; @@ -678,7 +678,7 @@ class ZhttpRequest::Private { log_warning("zhttp client: id=%s server is sending too fast", id.data()); } - responseBodyBuf += packet.body.asQByteArray(); + responseBodyBuf += packet.body; if (packet.more) { if (!doReq && packet.credits > 0) { @@ -711,7 +711,7 @@ class ZhttpRequest::Private { } } - void writeBody(const QByteArray &body) { + void writeBody(const CowByteArray &body) { assert(!bodyFinished); assert(!pausing && !paused); @@ -1051,7 +1051,7 @@ Variant ZhttpRequest::passthroughData() const { return d->passthrough; } QHostAddress ZhttpRequest::peerAddress() const { return d->peerAddress; } -void ZhttpRequest::setConnectHost(const QString &host) { d->connectHost = host; } +void ZhttpRequest::setConnectHost(const CowString &host) { d->connectHost = host; } void ZhttpRequest::setConnectPort(int port) { d->connectPort = port; } @@ -1063,7 +1063,7 @@ void ZhttpRequest::setIgnoreTlsErrors(bool on) { d->ignoreTlsErrors = on; } void ZhttpRequest::setTimeout(int msecs) { d->timeout = msecs; } -void ZhttpRequest::setClientCert(const QString &cert, const QString &key) { +void ZhttpRequest::setClientCert(const CowString &cert, const CowString &key) { d->clientCert = cert; d->clientKey = key; } @@ -1076,7 +1076,7 @@ void ZhttpRequest::setPassthroughData(const Variant &data) { d->passthrough = da void ZhttpRequest::setQuiet(bool on) { d->quiet = on; } -void ZhttpRequest::start(const QString &method, const CowUrl &uri, const HttpHeaders &headers) { +void ZhttpRequest::start(const CowString &method, const CowUrl &uri, const HttpHeaders &headers) { assert(!d->server); d->requestMethod = method; @@ -1085,7 +1085,7 @@ void ZhttpRequest::start(const QString &method, const CowUrl &uri, const HttpHea d->startClient(); } -void ZhttpRequest::beginResponse(int code, const QByteArray &reason, const HttpHeaders &headers) { +void ZhttpRequest::beginResponse(int code, const CowByteArray &reason, const HttpHeaders &headers) { assert(d->server); assert(d->state == Private::ServerReceiving || d->state == Private::ServerResponseWait); @@ -1095,7 +1095,7 @@ void ZhttpRequest::beginResponse(int code, const QByteArray &reason, const HttpH d->beginResponse(); } -void ZhttpRequest::writeBody(const QByteArray &body) { d->writeBody(body); } +void ZhttpRequest::writeBody(const CowByteArray &body) { d->writeBody(body); } void ZhttpRequest::endBody() { d->endBody(); } @@ -1164,7 +1164,7 @@ bool ZhttpRequest::isErrored() const { return d->errored; } HttpRequest::ErrorCondition ZhttpRequest::errorCondition() const { return d->errorCondition; } -QString ZhttpRequest::requestMethod() const { return d->requestMethod; } +CowString ZhttpRequest::requestMethod() const { return d->requestMethod; } CowUrl ZhttpRequest::requestUri() const { return d->requestUri; } @@ -1172,11 +1172,11 @@ HttpHeaders ZhttpRequest::requestHeaders() const { return d->requestHeaders; } int ZhttpRequest::responseCode() const { return d->responseCode; } -QByteArray ZhttpRequest::responseReason() const { return d->responseReason; } +CowByteArray ZhttpRequest::responseReason() const { return d->responseReason; } HttpHeaders ZhttpRequest::responseHeaders() const { return d->responseHeaders; } -QByteArray ZhttpRequest::readBody(int size) { return d->readBody(size); } +CowByteArray ZhttpRequest::readBody(int size) { return d->readBody(size); } void ZhttpRequest::setupClient(ZhttpManager *manager, bool req) { d->manager = manager; diff --git a/src/core/zhttprequest.h b/src/core/zhttprequest.h index eccd2320..85bea17e 100644 --- a/src/core/zhttprequest.h +++ b/src/core/zhttprequest.h @@ -24,6 +24,8 @@ #ifndef ZHTTPREQUEST_H #define ZHTTPREQUEST_H +#include "cowbytearray.h" +#include "cowstring.h" #include "cowurl.h" #include "httprequest.h" #include "variant.h" @@ -46,10 +48,10 @@ class ZhttpRequest : public HttpRequest { public: Rid rid; QHostAddress peerAddress; - QString requestMethod; + CowString requestMethod; CowUrl requestUri; HttpHeaders requestHeaders; - QByteArray requestBody; + CowByteArray requestBody; int responseCode; int inSeq; int outSeq; @@ -79,18 +81,18 @@ class ZhttpRequest : public HttpRequest { virtual QHostAddress peerAddress() const; - virtual void setConnectHost(const QString &host); + virtual void setConnectHost(const CowString &host); virtual void setConnectPort(int port); virtual void setIgnorePolicies(bool on); virtual void setTrustConnectHost(bool on); virtual void setIgnoreTlsErrors(bool on); virtual void setTimeout(int msecs); - virtual void setClientCert(const QString &cert, const QString &key); + virtual void setClientCert(const CowString &cert, const CowString &key); - virtual void start(const QString &method, const CowUrl &uri, const HttpHeaders &headers); - virtual void beginResponse(int code, const QByteArray &reason, const HttpHeaders &headers); + virtual void start(const CowString &method, const CowUrl &uri, const HttpHeaders &headers); + virtual void beginResponse(int code, const CowByteArray &reason, const HttpHeaders &headers); - virtual void writeBody(const QByteArray &body); + virtual void writeBody(const CowByteArray &body); virtual void endBody(); @@ -102,15 +104,15 @@ class ZhttpRequest : public HttpRequest { virtual bool isErrored() const; virtual ErrorCondition errorCondition() const; - virtual QString requestMethod() const; + virtual CowString requestMethod() const; virtual CowUrl requestUri() const; virtual HttpHeaders requestHeaders() const; virtual int responseCode() const; - virtual QByteArray responseReason() const; + virtual CowByteArray responseReason() const; virtual HttpHeaders responseHeaders() const; - virtual QByteArray readBody(int size = -1); + virtual CowByteArray readBody(int size = -1); private: class Private; diff --git a/src/handler/filter.cpp b/src/handler/filter.cpp index e4b076b3..1a371f2e 100644 --- a/src/handler/filter.cpp +++ b/src/handler/filter.cpp @@ -341,7 +341,7 @@ class HttpFilterInner { } } - QByteArray body = req->readBody(); + QByteArray body = req->readBody().asQByteArray(); if (mode == HttpFilter::Modify) { if (responseSizeMax >= 0 && responseBody.size() + body.size() > responseSizeMax) { diff --git a/src/handler/filtertest.cpp b/src/handler/filtertest.cpp index c1bdf404..36308050 100644 --- a/src/handler/filtertest.cpp +++ b/src/handler/filtertest.cpp @@ -105,7 +105,7 @@ class HttpFilterServer { } CowUrl uri = req->requestUri(); - QByteArray body = req->readBody(); + QByteArray body = req->readBody().asQByteArray(); bool preferInternal = req->passthroughData().toMap().value("prefer-internal").toBool(); if (uri.path() == "/filter/accept") { diff --git a/src/handler/httpsession.cpp b/src/handler/httpsession.cpp index ca27fd2f..778d3a31 100644 --- a/src/handler/httpsession.cpp +++ b/src/handler/httpsession.cpp @@ -1086,7 +1086,7 @@ class HttpSession::Private { if (avail <= 0) return; - QByteArray buf = outReq->readBody(avail); + QByteArray buf = outReq->readBody(avail).asQByteArray(); if (responseFilters) { buf = responseFilters->update(buf); @@ -1197,8 +1197,8 @@ class HttpSession::Private { } } - void logRequest(const QString &method, const CowUrl &uri, const HttpHeaders &headers, int code, - int bodySize) { + void logRequest(const CowString &method, const CowUrl &uri, const HttpHeaders &headers, + int code, int bodySize) { LogUtil::RequestData rd; // Only log route id if explicitly set @@ -1218,7 +1218,7 @@ class HttpSession::Private { LogUtil::logRequest(LOG_LEVEL_INFO, rd, logConfig); } - void logRequestError(const QString &method, const CowUrl &uri, const HttpHeaders &headers) { + void logRequestError(const CowString &method, const CowUrl &uri, const HttpHeaders &headers) { LogUtil::RequestData rd; // Only log route id if explicitly set diff --git a/src/proxy/proxysession.cpp b/src/proxy/proxysession.cpp index 05631633..9a039c66 100644 --- a/src/proxy/proxysession.cpp +++ b/src/proxy/proxysession.cpp @@ -485,7 +485,7 @@ class ProxySession::Private { if (maxBytes == 0) return; - QByteArray buf = inRequest->request()->readBody(maxBytes); + QByteArray buf = inRequest->request()->readBody(maxBytes).asQByteArray(); if (!buf.isEmpty()) { log_debug("proxysession: %p input chunk: %d", q, buf.size()); @@ -792,7 +792,7 @@ class ProxySession::Private { QByteArray buf; int maxBytes = (buffering ? MAX_INITIAL_BUFFER - responseBody.size() : MAX_STREAM_BUFFER); if (maxBytes > 0) - buf = zhttpRequest->readBody(maxBytes); + buf = zhttpRequest->readBody(maxBytes).asQByteArray(); if (!buf.isEmpty()) { incCounter(Stats::ServerContentBytesReceived, buf.size()); @@ -960,7 +960,7 @@ class ProxySession::Private { responseData.reason = zhttpRequest->responseReason(); responseData.headers = zhttpRequest->responseHeaders(); - QByteArray buf = zhttpRequest->readBody(MAX_INITIAL_BUFFER); + QByteArray buf = zhttpRequest->readBody(MAX_INITIAL_BUFFER).asQByteArray(); incCounter(Stats::ServerHeaderBytesReceived, ZhttpManager::estimateResponseHeaderBytes(responseData.code, diff --git a/src/proxy/requestsession.cpp b/src/proxy/requestsession.cpp index e738bd3d..24f2aeb4 100644 --- a/src/proxy/requestsession.cpp +++ b/src/proxy/requestsession.cpp @@ -457,7 +457,7 @@ class RequestSession::Private { q->inspected(idata); } } else if (state == ReceivingForAccept) { - QByteArray buf = zhttpRequest->readBody(); + QByteArray buf = zhttpRequest->readBody().asQByteArray(); if (in.size() + buf.size() > MAX_ACCEPT_REQUEST_BODY) { respondError(413, "Request Entity Too Large", QString("Body must not exceed %1 bytes").arg(MAX_ACCEPT_REQUEST_BODY)); diff --git a/src/proxy/sockjsmanager.cpp b/src/proxy/sockjsmanager.cpp index e51ac6a9..987090c0 100644 --- a/src/proxy/sockjsmanager.cpp +++ b/src/proxy/sockjsmanager.cpp @@ -371,7 +371,7 @@ class SockJsManager::Private { } void handleRequest(Session *s) { - QString method = s->req->requestMethod(); + CowString method = s->req->requestMethod(); log_debug("sockjs request: path=[%s], asUri=[%s]", s->path.data(), s->asUri.toEncoded().data()); diff --git a/src/proxy/testhttprequest.cpp b/src/proxy/testhttprequest.cpp index 531ca35d..7fc83d73 100644 --- a/src/proxy/testhttprequest.cpp +++ b/src/proxy/testhttprequest.cpp @@ -126,7 +126,7 @@ QHostAddress TestHttpRequest::peerAddress() const { return QHostAddress(); } -void TestHttpRequest::setConnectHost([[maybe_unused]] const QString &host) {} +void TestHttpRequest::setConnectHost([[maybe_unused]] const CowString &host) {} void TestHttpRequest::setConnectPort([[maybe_unused]] int port) {} @@ -138,10 +138,11 @@ void TestHttpRequest::setIgnoreTlsErrors([[maybe_unused]] bool on) {} void TestHttpRequest::setTimeout([[maybe_unused]] int msecs) {} -void TestHttpRequest::setClientCert([[maybe_unused]] const QString &cert, - [[maybe_unused]] const QString &key) {} +void TestHttpRequest::setClientCert([[maybe_unused]] const CowString &cert, + [[maybe_unused]] const CowString &key) {} -void TestHttpRequest::start(const QString &method, const CowUrl &uri, const HttpHeaders &headers) { +void TestHttpRequest::start(const CowString &method, const CowUrl &uri, + const HttpHeaders &headers) { assert(d->state == Private::Idle); d->state = Private::ReceivingRequest; @@ -152,13 +153,13 @@ void TestHttpRequest::start(const QString &method, const CowUrl &uri, const Http } void TestHttpRequest::beginResponse([[maybe_unused]] int code, - [[maybe_unused]] const QByteArray &reason, + [[maybe_unused]] const CowByteArray &reason, [[maybe_unused]] const HttpHeaders &headers) { // This class is client only assert(0); } -void TestHttpRequest::writeBody(const QByteArray &body) { +void TestHttpRequest::writeBody(const CowByteArray &body) { if (d->state == Private::ReceivingRequest) { if (d->requestBody.size() + body.size() > MAX_REQUEST_SIZE) { d->state = Private::Responding; @@ -166,7 +167,7 @@ void TestHttpRequest::writeBody(const QByteArray &body) { return; } - QByteArray buf = body.mid(0, MAX_REQUEST_SIZE - d->requestBody.size()); + CowByteArray buf = body.mid(0, MAX_REQUEST_SIZE - d->requestBody.size()); if (!buf.isEmpty()) { d->requestBody += buf; @@ -205,7 +206,7 @@ bool TestHttpRequest::isErrored() const { HttpRequest::ErrorCondition TestHttpRequest::errorCondition() const { return d->errorCondition; } -QString TestHttpRequest::requestMethod() const { return d->request.method.asQString(); } +CowString TestHttpRequest::requestMethod() const { return d->request.method; } CowUrl TestHttpRequest::requestUri() const { return d->request.uri; } @@ -213,8 +214,8 @@ HttpHeaders TestHttpRequest::requestHeaders() const { return d->request.headers; int TestHttpRequest::responseCode() const { return d->response.code; } -QByteArray TestHttpRequest::responseReason() const { return d->response.reason.asQByteArray(); } +CowByteArray TestHttpRequest::responseReason() const { return d->response.reason; } HttpHeaders TestHttpRequest::responseHeaders() const { return d->response.headers; } -QByteArray TestHttpRequest::readBody(int size) { return d->responseBody.take(size).asQByteArray(); } +CowByteArray TestHttpRequest::readBody(int size) { return d->responseBody.take(size); } diff --git a/src/proxy/testhttprequest.h b/src/proxy/testhttprequest.h index ec7b2531..7d04019e 100644 --- a/src/proxy/testhttprequest.h +++ b/src/proxy/testhttprequest.h @@ -23,6 +23,8 @@ #ifndef TESTHTTPREQUEST_H #define TESTHTTPREQUEST_H +#include "cowbytearray.h" +#include "cowstring.h" #include "cowurl.h" #include "httprequest.h" @@ -39,18 +41,18 @@ class TestHttpRequest : public HttpRequest { virtual QHostAddress peerAddress() const; - virtual void setConnectHost(const QString &host); + virtual void setConnectHost(const CowString &host); virtual void setConnectPort(int port); virtual void setIgnorePolicies(bool on); virtual void setTrustConnectHost(bool on); virtual void setIgnoreTlsErrors(bool on); virtual void setTimeout(int msecs); - virtual void setClientCert(const QString &cert, const QString &key); + virtual void setClientCert(const CowString &cert, const CowString &key); - virtual void start(const QString &method, const CowUrl &uri, const HttpHeaders &headers); - virtual void beginResponse(int code, const QByteArray &reason, const HttpHeaders &headers); + virtual void start(const CowString &method, const CowUrl &uri, const HttpHeaders &headers); + virtual void beginResponse(int code, const CowByteArray &reason, const HttpHeaders &headers); - virtual void writeBody(const QByteArray &body); + virtual void writeBody(const CowByteArray &body); virtual void endBody(); @@ -62,15 +64,15 @@ class TestHttpRequest : public HttpRequest { virtual bool isErrored() const; virtual ErrorCondition errorCondition() const; - virtual QString requestMethod() const; + virtual CowString requestMethod() const; virtual CowUrl requestUri() const; virtual HttpHeaders requestHeaders() const; virtual int responseCode() const; - virtual QByteArray responseReason() const; + virtual CowByteArray responseReason() const; virtual HttpHeaders responseHeaders() const; - virtual QByteArray readBody(int size = -1); + virtual CowByteArray readBody(int size = -1); private: class Private; diff --git a/src/proxy/websocketoverhttp.cpp b/src/proxy/websocketoverhttp.cpp index f59a3ff2..b10a5d56 100644 --- a/src/proxy/websocketoverhttp.cpp +++ b/src/proxy/websocketoverhttp.cpp @@ -549,7 +549,7 @@ class WebSocketOverHttp::Private { retries = 0; int responseCode = req->responseCode(); - QByteArray responseReason = req->responseReason(); + CowByteArray responseReason = req->responseReason(); HttpHeaders responseHeaders = req->responseHeaders(); QByteArray responseBody = inBuf.take().asQByteArray(); diff --git a/src/proxy/websocketoverhttptest.cpp b/src/proxy/websocketoverhttptest.cpp index 9a5f2c61..a54cf39c 100644 --- a/src/proxy/websocketoverhttptest.cpp +++ b/src/proxy/websocketoverhttptest.cpp @@ -105,7 +105,7 @@ class WohServer { CowUrl uri = req->requestUri(); HttpHeaders headers = req->requestHeaders(); - QByteArray body = req->readBody(); + QByteArray body = req->readBody().asQByteArray(); if (headers.get("Content-Type") != "application/websocket-events") { respondError(req, 400, "Bad Request",