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 18:11:00 -03:00
committed by GitHub
parent c5abc1d75f
commit 8a1ed3cba8
+47 -21
View File
@@ -547,7 +547,7 @@ extern "C"
}
}
void uws_ws(int ssl, uws_app_t *app, const char *pattern, uws_socket_behavior_t behavior, void* user_data)
void uws_ws(int ssl, uws_app_t *app, const char *pattern, uws_socket_behavior_t behavior, void *user_data)
{
if (ssl)
{
@@ -598,9 +598,9 @@ extern "C"
behavior.close((uws_websocket_t *)ws, code, message.data(), message.length(), user_data);
};
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);
};
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);
};
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);
};
uWS::App *uwsApp = (uWS::App *)app;
uwsApp->ws<void *>(pattern, std::move(generic_handler));
@@ -863,7 +863,6 @@ extern "C"
return uws->getBufferedAmount();
}
size_t uws_ws_get_remote_address(int ssl, uws_websocket_t *ws, const char **dest)
{
if (ssl)
@@ -896,7 +895,19 @@ extern "C"
*dest = value.data();
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)
{
if (ssl)
@@ -920,7 +931,7 @@ extern "C"
*dest = value.data();
return value.length();
}
uWS::HttpResponse<false> *uwsRes = (uWS::HttpResponse<false> *)res;
uWS::HttpResponse<false> *uwsRes = (uWS::HttpResponse<false> *)res;
std::string_view value = uwsRes->getRemoteAddress();
*dest = value.data();
@@ -936,7 +947,7 @@ extern "C"
*dest = value.data();
return value.length();
}
uWS::HttpResponse<false> *uwsRes = (uWS::HttpResponse<false> *)res;
uWS::HttpResponse<false> *uwsRes = (uWS::HttpResponse<false> *)res;
std::string_view value = uwsRes->getRemoteAddressAsText();
*dest = value.data();
@@ -952,7 +963,7 @@ extern "C"
*dest = value.data();
return value.length();
}
uWS::HttpResponse<false> *uwsRes = (uWS::HttpResponse<false> *)res;
uWS::HttpResponse<false> *uwsRes = (uWS::HttpResponse<false> *)res;
std::string_view value = uwsRes->getProxiedRemoteAddress();
*dest = value.data();
@@ -968,7 +979,7 @@ extern "C"
*dest = value.data();
return value.length();
}
uWS::HttpResponse<false> *uwsRes = (uWS::HttpResponse<false> *)res;
uWS::HttpResponse<false> *uwsRes = (uWS::HttpResponse<false> *)res;
std::string_view value = uwsRes->getProxiedRemoteAddressAsText();
*dest = value.data();
@@ -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)
{
if (ssl)
@@ -1140,8 +1150,11 @@ extern "C"
uWS::HttpResponse<true> *uwsRes = (uWS::HttpResponse<true> *)res;
uwsRes->overrideWriteOffset(offset);
}
uWS::HttpResponse<false> *uwsRes = (uWS::HttpResponse<false> *)res;
uwsRes->overrideWriteOffset(offset);
else
{
uWS::HttpResponse<false> *uwsRes = (uWS::HttpResponse<false> *)res;
uwsRes->overrideWriteOffset(offset);
}
}
bool uws_res_has_responded(int ssl, uws_res_t *res)
{
@@ -1289,16 +1302,29 @@ 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)
{
uWS::HttpResponse<false> *uwsRes = (uWS::HttpResponse<false> *)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);
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;
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);
}
}
void *uws_res_get_native_handle(int ssl, uws_res_t *res)
{
if (ssl)