aboutsummaryrefslogtreecommitdiff
path: root/src/deps
diff options
context:
space:
mode:
Diffstat (limited to 'src/deps')
-rw-r--r--src/deps/_libusockets.h2
-rw-r--r--src/deps/libuwsockets.cpp37
-rw-r--r--src/deps/uws.zig15
3 files changed, 51 insertions, 3 deletions
diff --git a/src/deps/_libusockets.h b/src/deps/_libusockets.h
index 3b8c61f74..e8a510392 100644
--- a/src/deps/_libusockets.h
+++ b/src/deps/_libusockets.h
@@ -295,6 +295,8 @@ void *uws_res_get_native_handle(int ssl, uws_res_t *res);
void uws_res_uncork(int ssl, uws_res_t *res);
void uws_res_set_write_offset(int ssl, uws_res_t *res, size_t off);
void us_socket_mark_needs_more_not_ssl(uws_res_t *res);
+void uws_req_clone_headers(uws_req_t *req_, void *ctx);
+
#ifdef __cplusplus
}
#endif
diff --git a/src/deps/libuwsockets.cpp b/src/deps/libuwsockets.cpp
index 39e0e27fc..1bc370b17 100644
--- a/src/deps/libuwsockets.cpp
+++ b/src/deps/libuwsockets.cpp
@@ -897,7 +897,7 @@ void uws_req_set_field(uws_req_t *res, bool yield) {
size_t uws_req_get_url(uws_req_t *res, const char **dest) {
uWS::HttpRequest *uwsReq = (uWS::HttpRequest *)res;
- std::string_view value = uwsReq->getUrl();
+ std::string_view value = uwsReq->getFullUrl();
*dest = value.data();
return value.length();
}
@@ -1005,12 +1005,43 @@ void uws_res_write_headers(int ssl, uws_res_t *res, const StringPointer *names,
}
}
+extern "C" void Headers__preallocate(void *ctx, size_t len,
+ size_t header_count);
+extern "C" void Headers__appendHeaderNormalized(void *ctx, const char *name,
+ size_t name_length,
+ const char *value,
+ size_t value_length);
+
+void uws_req_clone_headers(uws_req_t *req_, void *ctx) {
+
+ size_t buffer_len = 0;
+ size_t header_count = 0;
+
+ uWS::HttpRequest *req = (uWS::HttpRequest *)req_;
+ uWS::HttpRequest iterator = *req;
+
+ for (const auto &header : iterator) {
+ buffer_len += header.first.length() + header.second.length();
+ header_count++;
+ }
+
+ Headers__preallocate(ctx, buffer_len, header_count);
+
+ for (const auto &header : iterator) {
+ Headers__appendHeaderNormalized(ctx, header.first.data(),
+ header.first.length(), header.second.data(),
+ header.second.length());
+ }
+}
+
void uws_res_uncork(int ssl, uws_res_t *res) {
// if (ssl) {
- // uWS::HttpResponse<true> *uwsRes = (uWS::HttpResponse<true> *)res;
+ // uWS::HttpResponse<true> *uwsRes =
+ // (uWS::HttpResponse<true> *)res;
// uwsRes->uncork();
// } else {
- // uWS::HttpResponse<false> *uwsRes = (uWS::HttpResponse<false> *)res;
+ // uWS::HttpResponse<false> *uwsRes =
+ // (uWS::HttpResponse<false> *)res;
// uwsRes->uncork();
// }
}
diff --git a/src/deps/uws.zig b/src/deps/uws.zig
index a9753406e..2f590606c 100644
--- a/src/deps/uws.zig
+++ b/src/deps/uws.zig
@@ -170,6 +170,21 @@ pub const Request = opaque {
var ptr: [*]const u8 = undefined;
return ptr[0..req.uws_req_get_parameter(@intCast(c_ushort, index), &ptr)];
}
+
+ pub fn cloneHeaders(
+ req: *Request,
+ ctx: *anyopaque,
+ ) void {
+ uws_req_clone_headers(req, ctx);
+ }
+
+ extern fn uws_req_clone_headers(
+ req_: *Request,
+ ctx: *anyopaque,
+ //preallocate: fn (ctx: ?*anyopaque, len: usize, header_count: usize) callconv(.C) void,
+ //append: fn (ctx: ?*anyopaque, name: [*]const u8, name_length: usize, value: [*]const u8, value_length: usize) callconv(.C) void,
+ ) void;
+
extern fn uws_req_is_ancient(res: *Request) bool;
extern fn uws_req_get_yield(res: *Request) bool;
extern fn uws_req_set_field(res: *Request, yield: bool) void;