fix(CAPI) uws_res_upgrade, uws_res_override_write_offset, feat(CAPI) uws_res_close and subscription events (#1571)

* fix uws_res_override_write_offset and uws_res_upgrade

* revert uSockets back
This commit is contained in:
Ciro Spaciari
2023-02-24 22:11:00 +01:00
committed by GitHub
parent c5abc1d75f
commit 8a1ed3cba8
+34 -8
View File
@@ -598,9 +598,9 @@ extern "C"
behavior.close((uws_websocket_t *)ws, code, message.data(), message.length(), user_data); behavior.close((uws_websocket_t *)ws, code, message.data(), message.length(), user_data);
}; };
if (behavior.subscription) if (behavior.subscription)
generic_handler.subscription = [behavior, user_data](auto *ws, auto topic, int subscribers, int old_subscribers){ generic_handler.subscription = [behavior, user_data](auto *ws, auto topic, int subscribers, int old_subscribers)
{
behavior.subscription((uws_websocket_t *)ws, topic.data(), topic.length(), subscribers, old_subscribers, user_data); behavior.subscription((uws_websocket_t *)ws, topic.data(), topic.length(), subscribers, old_subscribers, user_data);
}; };
uWS::SSLApp *uwsApp = (uWS::SSLApp *)app; uWS::SSLApp *uwsApp = (uWS::SSLApp *)app;
@@ -655,9 +655,9 @@ extern "C"
behavior.close((uws_websocket_t *)ws, code, message.data(), message.length(), user_data); behavior.close((uws_websocket_t *)ws, code, message.data(), message.length(), user_data);
}; };
if (behavior.subscription) if (behavior.subscription)
generic_handler.subscription = [behavior, user_data](auto *ws, auto topic, int subscribers, int old_subscribers){ generic_handler.subscription = [behavior, user_data](auto *ws, auto topic, int subscribers, int old_subscribers)
{
behavior.subscription((uws_websocket_t *)ws, topic.data(), topic.length(), subscribers, old_subscribers, user_data); behavior.subscription((uws_websocket_t *)ws, topic.data(), topic.length(), subscribers, old_subscribers, user_data);
}; };
uWS::App *uwsApp = (uWS::App *)app; uWS::App *uwsApp = (uWS::App *)app;
uwsApp->ws<void *>(pattern, std::move(generic_handler)); uwsApp->ws<void *>(pattern, std::move(generic_handler));
@@ -863,7 +863,6 @@ extern "C"
return uws->getBufferedAmount(); return uws->getBufferedAmount();
} }
size_t uws_ws_get_remote_address(int ssl, uws_websocket_t *ws, const char **dest) size_t uws_ws_get_remote_address(int ssl, uws_websocket_t *ws, const char **dest)
{ {
if (ssl) if (ssl)
@@ -896,7 +895,19 @@ extern "C"
*dest = value.data(); *dest = value.data();
return value.length(); return value.length();
} }
void uws_res_close(int ssl, uws_res_t *res)
{
if (ssl)
{
uWS::HttpResponse<true> *uwsRes = (uWS::HttpResponse<true> *)res;
uwsRes->close();
}
else
{
uWS::HttpResponse<false> *uwsRes = (uWS::HttpResponse<false> *)res;
uwsRes->close();
}
}
void uws_res_end(int ssl, uws_res_t *res, const char *data, size_t length, bool close_connection) void uws_res_end(int ssl, uws_res_t *res, const char *data, size_t length, bool close_connection)
{ {
if (ssl) if (ssl)
@@ -998,7 +1009,6 @@ extern "C"
} }
} }
void uws_res_cork(int ssl, uws_res_t *res, void (*callback)(uws_res_t *res, void *user_data), void *user_data) void uws_res_cork(int ssl, uws_res_t *res, void (*callback)(uws_res_t *res, void *user_data), void *user_data)
{ {
if (ssl) if (ssl)
@@ -1140,9 +1150,12 @@ extern "C"
uWS::HttpResponse<true> *uwsRes = (uWS::HttpResponse<true> *)res; uWS::HttpResponse<true> *uwsRes = (uWS::HttpResponse<true> *)res;
uwsRes->overrideWriteOffset(offset); uwsRes->overrideWriteOffset(offset);
} }
else
{
uWS::HttpResponse<false> *uwsRes = (uWS::HttpResponse<false> *)res; uWS::HttpResponse<false> *uwsRes = (uWS::HttpResponse<false> *)res;
uwsRes->overrideWriteOffset(offset); uwsRes->overrideWriteOffset(offset);
} }
}
bool uws_res_has_responded(int ssl, uws_res_t *res) bool uws_res_has_responded(int ssl, uws_res_t *res)
{ {
if (ssl) if (ssl)
@@ -1288,6 +1301,19 @@ extern "C"
} }
void uws_res_upgrade(int ssl, uws_res_t *res, void *data, const char *sec_web_socket_key, size_t sec_web_socket_key_length, const char *sec_web_socket_protocol, size_t sec_web_socket_protocol_length, const char *sec_web_socket_extensions, size_t sec_web_socket_extensions_length, uws_socket_context_t *ws) void uws_res_upgrade(int ssl, uws_res_t *res, void *data, const char *sec_web_socket_key, size_t sec_web_socket_key_length, const char *sec_web_socket_protocol, size_t sec_web_socket_protocol_length, const char *sec_web_socket_extensions, size_t sec_web_socket_extensions_length, uws_socket_context_t *ws)
{
if (ssl)
{
uWS::HttpResponse<true> *uwsRes = (uWS::HttpResponse<true> *)res;
uwsRes->template upgrade<void *>(data ? std::move(data) : NULL,
std::string_view(sec_web_socket_key, sec_web_socket_key_length),
std::string_view(sec_web_socket_protocol, sec_web_socket_protocol_length),
std::string_view(sec_web_socket_extensions, sec_web_socket_extensions_length),
(struct us_socket_context_t *)ws);
}
else
{ {
uWS::HttpResponse<false> *uwsRes = (uWS::HttpResponse<false> *)res; uWS::HttpResponse<false> *uwsRes = (uWS::HttpResponse<false> *)res;
@@ -1297,7 +1323,7 @@ extern "C"
std::string_view(sec_web_socket_extensions, sec_web_socket_extensions_length), std::string_view(sec_web_socket_extensions, sec_web_socket_extensions_length),
(struct us_socket_context_t *)ws); (struct us_socket_context_t *)ws);
} }
}
void *uws_res_get_native_handle(int ssl, uws_res_t *res) void *uws_res_get_native_handle(int ssl, uws_res_t *res)
{ {