1515#include " runtime-light/stdlib/diagnostics/logs.h"
1616#include " runtime-light/stdlib/web-transfer-lib/defs.h"
1717#include " runtime-light/stdlib/web-transfer-lib/details/web-error.h"
18+ #include " runtime-light/stdlib/web-transfer-lib/details/web-response.h"
1819#include " runtime-light/stdlib/web-transfer-lib/web-composite-transfer.h"
1920#include " runtime-light/stdlib/web-transfer-lib/web-state.h"
2021#include " runtime-light/tl/tl-core.h"
@@ -81,15 +82,6 @@ inline auto simple_transfer_perform(simple_transfer st) noexcept -> kphp::coro::
8182 co_return std::unexpected{error{.code = WEB_INTERNAL_ERROR_CODE, .description = string{" unknown Simple transfer" }}};
8283 }
8384
84- auto session{web_state.session_get_or_init ()};
85- if (!session.has_value ()) [[unlikely]] {
86- kphp::log::error (" failed to start or get session with Web component" );
87- }
88-
89- if ((*session).get () == nullptr ) [[unlikely]] {
90- kphp::log::error (" session with Web components has been closed" );
91- }
92-
9385 kphp::stl::vector<tl::webProperty, kphp::memory::script_allocator> tl_props{};
9486 auto & props{simple2config[st.descriptor ].properties };
9587 for (const auto & [id, val] : props) {
@@ -101,61 +93,21 @@ inline auto simple_transfer_perform(simple_transfer st) noexcept -> kphp::coro::
10193 tl::storer tls{tl_perform.footprint ()};
10294 tl_perform.store (tls);
10395
104- kphp::stl::vector<std::byte, kphp::memory::script_allocator> ok_or_error_buffer{};
105- response resp{};
106- std::optional<error> err{};
107- auto frame_num{0 };
108-
109- auto response_buffer_provider{[&frame_num, &ok_or_error_buffer, &resp](size_t size) noexcept -> std::span<std::byte> {
110- switch (frame_num) {
111- case 0 :
112- ok_or_error_buffer.resize (size);
113- return {ok_or_error_buffer.data (), size};
114- case 1 :
115- resp.headers = string{static_cast <string::size_type>(size), false };
116- return {reinterpret_cast <std::byte*>(resp.headers .buffer ()), size};
117- case 2 :
118- resp.body = string{static_cast <string::size_type>(size), false };
119- return {reinterpret_cast <std::byte*>(resp.body .buffer ()), size};
120- default :
121- kphp::log::assertion (false );
122- return {};
123- }
124- }};
96+ co_return co_await details::process_simple_response (tls.view ());
97+ }
12598
126- const auto response_handler{[&frame_num, &err, &ok_or_error_buffer](
127- [[maybe_unused]] std::span<std::byte> _) noexcept -> kphp::component::inter_component_session::client::response_readiness {
128- switch (frame_num) {
129- case 0 : {
130- frame_num += 1 ;
131- tl::Either<tl::SimpleWebTransferPerformResultOk, tl::WebError> simple_web_transfer_perform_resp{};
132- tl::fetcher tlf{ok_or_error_buffer};
133- if (!simple_web_transfer_perform_resp.fetch (tlf)) [[unlikely]] {
134- kphp::log::error (" failed to parse response of Simple descriptor performing" );
135- }
136- if (auto r{simple_web_transfer_perform_resp.value }; std::holds_alternative<tl::WebError>(r)) {
137- err.emplace (details::process_error (std::get<tl::WebError>(r)));
138- return kphp::component::inter_component_session::client::response_readiness::ready;
139- }
140- return kphp::component::inter_component_session::client::response_readiness::pending;
141- }
142- case 1 :
143- frame_num += 1 ;
144- return kphp::component::inter_component_session::client::response_readiness::pending;
145- case 2 : // NOLINT
146- return kphp::component::inter_component_session::client::response_readiness::ready;
147- default :
148- return kphp::component::inter_component_session::client::response_readiness::ready;
149- }
150- }};
99+ inline auto simple_transfer_get_response (simple_transfer st) noexcept -> kphp::coro::task<std::expected<response, error>> {
100+ auto & web_state{WebInstanceState::get ()};
151101
152- if (auto res{co_await (*session).get ()->client .query (tls.view (), std::move (response_buffer_provider), response_handler)}; !res) [[unlikely]] {
153- kphp::log::error (" failed to send request of Simple descriptor performing" );
154- }
155- if (err.has_value ()) [[unlikely]] {
156- co_return std::unexpected{std::move (*err)};
102+ if (!web_state.simple_transfer2config .contains (st.descriptor )) {
103+ co_return std::unexpected{error{.code = WEB_INTERNAL_ERROR_CODE, .description = string{" unknown Simple transfer" }}};
157104 }
158- co_return std::expected<response, error>{std::move (resp)};
105+
106+ tl::SimpleWebTransferGetResponse web_transfer_get_resp{.descriptor = tl::u64 {st.descriptor }};
107+ tl::storer tls{web_transfer_get_resp.footprint ()};
108+ web_transfer_get_resp.store (tls);
109+
110+ co_return co_await details::process_simple_response (tls.view ());
159111}
160112
161113inline auto simple_transfer_reset (simple_transfer st) noexcept -> kphp::coro::task<std::expected<void, error>> {
0 commit comments