aboutsummaryrefslogtreecommitdiff
path: root/zenhttp
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2021-09-12 11:51:29 +0200
committerStefan Boberg <[email protected]>2021-09-12 11:51:29 +0200
commit822b0b1cb3868fdfc2b7159cdbf11c3df776c9dd (patch)
tree7888b5017fdcd085103a60b14bff3efd5e7be7f3 /zenhttp
parentAdded gb benchmark tool for test script usage (diff)
downloadzen-822b0b1cb3868fdfc2b7159cdbf11c3df776c9dd.tar.xz
zen-822b0b1cb3868fdfc2b7159cdbf11c3df776c9dd.zip
HttpResponse enum -> HttpResponseCode
Also removed initial CbPackage API HttpServer changes as I have decided to take a different approach
Diffstat (limited to 'zenhttp')
-rw-r--r--zenhttp/httpserver.cpp29
-rw-r--r--zenhttp/httpsys.cpp26
-rw-r--r--zenhttp/httpuws.cpp29
-rw-r--r--zenhttp/httpuws.h8
-rw-r--r--zenhttp/include/zenhttp/httpserver.h42
5 files changed, 56 insertions, 78 deletions
diff --git a/zenhttp/httpserver.cpp b/zenhttp/httpserver.cpp
index b11feacd5..e283f31c9 100644
--- a/zenhttp/httpserver.cpp
+++ b/zenhttp/httpserver.cpp
@@ -80,7 +80,7 @@ struct CbAttachmentEntry
};
void
-HttpServerRequest::WriteResponse(HttpResponse HttpResponseCode, CbPackage Data)
+HttpServerRequest::WriteResponse(HttpResponseCode ResponseCode, CbPackage Data)
{
const std::span<const CbAttachment>& Attachments = Data.GetAttachments();
@@ -128,28 +128,28 @@ HttpServerRequest::WriteResponse(HttpResponse HttpResponseCode, CbPackage Data)
}
}
- return WriteResponse(HttpResponseCode, HttpContentType::kCbPackage, ResponseBuffers);
+ return WriteResponse(ResponseCode, HttpContentType::kCbPackage, ResponseBuffers);
}
void
-HttpServerRequest::WriteResponse(HttpResponse HttpResponseCode, CbObject Data)
+HttpServerRequest::WriteResponse(HttpResponseCode ResponseCode, CbObject Data)
{
SharedBuffer Buf = Data.GetBuffer();
std::array<IoBuffer, 1> Buffers{IoBufferBuilder::MakeCloneFromMemory(Buf.GetData(), Buf.GetSize())};
- return WriteResponse(HttpResponseCode, HttpContentType::kCbObject, Buffers);
+ return WriteResponse(ResponseCode, HttpContentType::kCbObject, Buffers);
}
void
-HttpServerRequest::WriteResponse(HttpResponse HttpResponseCode, HttpContentType ContentType, std::string_view ResponseString)
+HttpServerRequest::WriteResponse(HttpResponseCode ResponseCode, HttpContentType ContentType, std::string_view ResponseString)
{
- return WriteResponse(HttpResponseCode, ContentType, std::u8string_view{(char8_t*)ResponseString.data(), ResponseString.size()});
+ return WriteResponse(ResponseCode, ContentType, std::u8string_view{(char8_t*)ResponseString.data(), ResponseString.size()});
}
void
-HttpServerRequest::WriteResponse(HttpResponse HttpResponseCode, HttpContentType ContentType, IoBuffer Blob)
+HttpServerRequest::WriteResponse(HttpResponseCode ResponseCode, HttpContentType ContentType, IoBuffer Blob)
{
std::array<IoBuffer, 1> Buffers{Blob};
- return WriteResponse(HttpResponseCode, ContentType, Buffers);
+ return WriteResponse(ResponseCode, ContentType, Buffers);
}
HttpServerRequest::QueryParams
@@ -299,19 +299,6 @@ HttpRequestRouter::RegisterRoute(const char* Regex, HttpRequestRouter::HandlerFu
}
void
-HttpRequestRouter::RegisterRoute(const char* Regex, PackageEndpointHandler& Handler)
-{
- ExtendableStringBuilder<128> ExpandedRegex;
- ProcessRegexSubstitutions(Regex, ExpandedRegex);
-
- m_Handlers.emplace_back(
- ExpandedRegex.c_str(),
- HttpVerb::kPost,
- [&Handler](HttpRouterRequest& Request) { Handler.HandleRequest(Request); },
- Regex);
-}
-
-void
HttpRequestRouter::ProcessRegexSubstitutions(const char* Regex, StringBuilderBase& OutExpandedRegex)
{
size_t RegexLen = strlen(Regex);
diff --git a/zenhttp/httpsys.cpp b/zenhttp/httpsys.cpp
index 1050bbbb7..7bb3bbc75 100644
--- a/zenhttp/httpsys.cpp
+++ b/zenhttp/httpsys.cpp
@@ -366,9 +366,9 @@ public:
~HttpSysServerRequest() = default;
virtual IoBuffer ReadPayload() override;
- virtual void WriteResponse(HttpResponse HttpResponseCode) override;
- virtual void WriteResponse(HttpResponse HttpResponseCode, HttpContentType ContentType, std::span<IoBuffer> Blobs) override;
- virtual void WriteResponse(HttpResponse HttpResponseCode, HttpContentType ContentType, std::u8string_view ResponseString) override;
+ virtual void WriteResponse(HttpResponseCode ResponseCode) override;
+ virtual void WriteResponse(HttpResponseCode ResponseCode, HttpContentType ContentType, std::span<IoBuffer> Blobs) override;
+ virtual void WriteResponse(HttpResponseCode ResponseCode, HttpContentType ContentType, std::u8string_view ResponseString) override;
HttpSysTransaction& m_HttpTx;
HttpMessageResponseRequest* m_Response = nullptr; // TODO: make this more general
@@ -464,7 +464,7 @@ private:
std::vector<HTTP_DATA_CHUNK> m_HttpDataChunks;
uint64_t m_TotalDataSize = 0; // Sum of all chunk sizes
- uint16_t m_HttpResponseCode = 0;
+ uint16_t m_ResponseCode = 0;
uint32_t m_NextDataChunkOffset = 0; // This is used for responses where the number of chunks exceed the maximum number for one API call
uint32_t m_RemainingChunkCount = 0;
bool m_IsInitialResponse = true;
@@ -525,7 +525,7 @@ HttpMessageResponseRequest::~HttpMessageResponseRequest()
void
HttpMessageResponseRequest::Initialize(uint16_t ResponseCode, std::span<IoBuffer> BlobList)
{
- m_HttpResponseCode = ResponseCode;
+ m_ResponseCode = ResponseCode;
const uint32_t ChunkCount = gsl::narrow<uint32_t>(BlobList.size());
@@ -671,8 +671,8 @@ HttpMessageResponseRequest::IssueRequest()
ContentTypeHeader->pRawValue = ContentTypeString.data();
ContentTypeHeader->RawValueLength = (USHORT)ContentTypeString.size();
- HttpResponse.StatusCode = m_HttpResponseCode;
- HttpResponse.pReason = ReasonStringForHttpResultCode(m_HttpResponseCode);
+ HttpResponse.StatusCode = m_ResponseCode;
+ HttpResponse.pReason = ReasonStringForHttpResultCode(m_ResponseCode);
HttpResponse.ReasonLength = (USHORT)strlen(HttpResponse.pReason);
// Cache policy
@@ -1143,11 +1143,11 @@ HttpSysServerRequest::ReadPayload()
}
void
-HttpSysServerRequest::WriteResponse(HttpResponse HttpResponseCode)
+HttpSysServerRequest::WriteResponse(HttpResponseCode ResponseCode)
{
ZEN_ASSERT(m_IsHandled == false);
- m_Response = new HttpMessageResponseRequest(m_HttpTx, (uint16_t)HttpResponseCode);
+ m_Response = new HttpMessageResponseRequest(m_HttpTx, (uint16_t)ResponseCode);
if (m_SuppressBody)
{
@@ -1158,11 +1158,11 @@ HttpSysServerRequest::WriteResponse(HttpResponse HttpResponseCode)
}
void
-HttpSysServerRequest::WriteResponse(HttpResponse HttpResponseCode, HttpContentType ContentType, std::span<IoBuffer> Blobs)
+HttpSysServerRequest::WriteResponse(HttpResponseCode ResponseCode, HttpContentType ContentType, std::span<IoBuffer> Blobs)
{
ZEN_ASSERT(m_IsHandled == false);
- m_Response = new HttpMessageResponseRequest(m_HttpTx, (uint16_t)HttpResponseCode, ContentType, Blobs);
+ m_Response = new HttpMessageResponseRequest(m_HttpTx, (uint16_t)ResponseCode, ContentType, Blobs);
if (m_SuppressBody)
{
@@ -1173,12 +1173,12 @@ HttpSysServerRequest::WriteResponse(HttpResponse HttpResponseCode, HttpContentTy
}
void
-HttpSysServerRequest::WriteResponse(HttpResponse HttpResponseCode, HttpContentType ContentType, std::u8string_view ResponseString)
+HttpSysServerRequest::WriteResponse(HttpResponseCode ResponseCode, HttpContentType ContentType, std::u8string_view ResponseString)
{
ZEN_ASSERT(m_IsHandled == false);
m_Response =
- new HttpMessageResponseRequest(m_HttpTx, (uint16_t)HttpResponseCode, ContentType, ResponseString.data(), ResponseString.size());
+ new HttpMessageResponseRequest(m_HttpTx, (uint16_t)ResponseCode, ContentType, ResponseString.data(), ResponseString.size());
if (m_SuppressBody)
{
diff --git a/zenhttp/httpuws.cpp b/zenhttp/httpuws.cpp
index 2fb3734e8..992809b17 100644
--- a/zenhttp/httpuws.cpp
+++ b/zenhttp/httpuws.cpp
@@ -1,7 +1,9 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
#include "httpuws.h"
#pragma warning(push)
-#pragma warning(disable : 4244 4267 4458 4706)
+#pragma warning(disable : 4244 4324 4267 4458 4706)
#include <uwebsockets/App.h>
#pragma warning(pop)
@@ -42,12 +44,25 @@ HttpUwsServer::Run(bool TestMode)
zen::logging::ConsoleLog().info("Zen Server running (null HTTP). Press ESC or Q to quit");
}
- ::uWS::App().get("/*", [](uWS::HttpResponse<false>* res, uWS::HttpRequest* req) {
- res->end("Hello world!");
- ZEN_UNUSED(req);
- }).listen(m_BasePort, [](auto* listen_socket) {
- ZEN_UNUSED(listen_socket);
- }).run();
+ ::uWS::App()
+ .get("/*",
+ [](uWS::HttpResponse<false>* res, uWS::HttpRequest* req) {
+ res->end("Hello world!");
+ ZEN_UNUSED(req);
+ })
+ .post("/*",
+ [](uWS::HttpResponse<false>* res, uWS::HttpRequest* req) {
+ res->onData([&](std::string_view Data, bool fin) {
+ ZEN_UNUSED(Data);
+ if (fin)
+ res->end("Hello world!");
+ });
+
+ res->onAborted([&] {});
+ ZEN_UNUSED(req);
+ })
+ .listen(m_BasePort, [](auto* listen_socket) { ZEN_UNUSED(listen_socket); })
+ .run();
do
{
diff --git a/zenhttp/httpuws.h b/zenhttp/httpuws.h
index 2852764f7..ec55ae2fd 100644
--- a/zenhttp/httpuws.h
+++ b/zenhttp/httpuws.h
@@ -1,3 +1,5 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
#pragma once
#include <zenhttp/httpserver.h>
@@ -8,7 +10,7 @@ namespace zen {
class HttpUwsServer : public HttpServer
{
- public:
+public:
HttpUwsServer();
~HttpUwsServer();
@@ -19,7 +21,7 @@ class HttpUwsServer : public HttpServer
private:
Event m_ShutdownEvent;
- int m_BasePort = 0;
+ int m_BasePort = 0;
};
-} \ No newline at end of file
+} // namespace zen \ No newline at end of file
diff --git a/zenhttp/include/zenhttp/httpserver.h b/zenhttp/include/zenhttp/httpserver.h
index 24ba615f3..4267903ae 100644
--- a/zenhttp/include/zenhttp/httpserver.h
+++ b/zenhttp/include/zenhttp/httpserver.h
@@ -40,7 +40,7 @@ enum class HttpVerb
gsl_DEFINE_ENUM_BITMASK_OPERATORS(HttpVerb);
-enum class HttpResponse
+enum class HttpResponseCode
{
// 1xx - Informational
@@ -239,14 +239,14 @@ public:
Note that this is destructive in the sense that the IoBuffer instances referred to by Blobs will be
moved into our response handler array where they are kept alive, in order to reduce ref-counting storms
*/
- virtual void WriteResponse(HttpResponse HttpResponseCode, HttpContentType ContentType, std::span<IoBuffer> Blobs) = 0;
- virtual void WriteResponse(HttpResponse HttpResponseCode) = 0;
- virtual void WriteResponse(HttpResponse HttpResponseCode, HttpContentType ContentType, std::u8string_view ResponseString) = 0;
+ virtual void WriteResponse(HttpResponseCode ResponseCode, HttpContentType ContentType, std::span<IoBuffer> Blobs) = 0;
+ virtual void WriteResponse(HttpResponseCode ResponseCode) = 0;
+ virtual void WriteResponse(HttpResponseCode ResponseCode, HttpContentType ContentType, std::u8string_view ResponseString) = 0;
- void WriteResponse(HttpResponse HttpResponseCode, CbObject Data);
- void WriteResponse(HttpResponse HttpResponseCode, CbPackage Package);
- void WriteResponse(HttpResponse HttpResponseCode, HttpContentType ContentType, std::string_view ResponseString);
- void WriteResponse(HttpResponse HttpResponseCode, HttpContentType ContentType, IoBuffer Blob);
+ void WriteResponse(HttpResponseCode ResponseCode, CbObject Data);
+ void WriteResponse(HttpResponseCode ResponseCode, CbPackage Package);
+ void WriteResponse(HttpResponseCode ResponseCode, HttpContentType ContentType, std::string_view ResponseString);
+ void WriteResponse(HttpResponseCode ResponseCode, HttpContentType ContentType, IoBuffer Blob);
protected:
bool m_IsHandled = false;
@@ -339,25 +339,6 @@ HttpRouterRequest::GetCapture(uint32_t Index) const
return m_Match[Index];
}
-//////////////////////////////////////////////////////////////////////////
-
-class PackageRequestContext
-{
-public:
- PackageRequestContext();
- ~PackageRequestContext();
-
-private:
-};
-
-class PackageEndpointHandler
-{
-public:
- virtual void HandleRequest(HttpRouterRequest& Request) = 0;
-
-private:
-};
-
/** HTTP request router helper
*
* This helper class allows a service implementer to register one or more
@@ -388,13 +369,6 @@ public:
* @param SupportedVerbs Supported HTTP verbs for this handler
*/
void RegisterRoute(const char* Regex, HandlerFunc_t&& HandlerFunc, HttpVerb SupportedVerbs);
- /**
- * @brief Register CbPackage endpoint handler
- * @param Regex Regular expression used to match the handler to a request. This may
- * contain pattern aliases registered via AddPattern
- * @param Handler Package handler instance
- */
- void RegisterRoute(const char* Regex, PackageEndpointHandler& Handler);
void ProcessRegexSubstitutions(const char* Regex, StringBuilderBase& ExpandedRegex);