Skip to content

Commit 632d4b9

Browse files
committed
FIX | some bugs
1 parent ba64456 commit 632d4b9

File tree

5 files changed

+39
-29
lines changed

5 files changed

+39
-29
lines changed

main.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -261,13 +261,13 @@ int main () {
261261

262262
router.POST ("/upload2", [] (manapi::net::http::request &req, manapi::net::http::response &resp)
263263
-> manapi::future<> {
264-
resp.header(manapi::net::http::HEADER.CONTENT_LENGTH, req.header(manapi::net::http::HEADER.CONTENT_LENGTH));
264+
//resp.header(manapi::net::http::HEADER.CONTENT_LENGTH, req.header(manapi::net::http::HEADER.CONTENT_LENGTH));
265265
co_return resp.callback_stream([&resp, &req] (manapi::net::http::response::resp_stream_cb cb) -> manapi::future<> {
266-
std::size_t sum = 0;
267-
co_await req.callback_async([&sum, cb = std::move(cb)] (const char *buffer, ssize_t size, bool fin) mutable
266+
267+
co_await req.callback_async([cb = std::move(cb)] (const char *buffer, ssize_t size, bool fin) mutable
268268
-> manapi::future<ssize_t> {
269-
sum += size;
270-
std::cout << sum << " " << size << " " << fin << "\n";
269+
//sum += size;
270+
//std::cout << sum << " " << size << " " << fin << "\n";
271271
co_return co_await cb (buffer, size, fin);
272272
});
273273
});

src/components/FormData.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ manapi::future<void> manapi::net::formdata_recv::get(onparam_cb_t cb) {
121121
case CONTENT_TYPE_MULTIPART_FORM_DATA: {
122122
co_await this->onrecv_cb_ (this->worker_, this->conn_, this->req_,
123123
[this] (const char *buffer, ssize_t size, bool fin) -> manapi::future<ssize_t> {
124-
return this->onrecv_multipart_(buffer, size);
124+
co_return co_await this->onrecv_multipart_(buffer, size);
125125
});
126126
break;
127127
}
@@ -480,7 +480,7 @@ manapi::future<ssize_t> manapi::net::formdata_recv::onrecv_multipart_(const char
480480
if (!n1) {
481481
auto const beyond = (pos - n1);
482482
auto const copy = beyond - this->ctx_->n2;
483-
483+
assert((copy >= 0));
484484
if (this->ondata_cb_) {
485485
ssize_t res = 0;
486486

src/http/base_http.cpp

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -346,9 +346,8 @@ manapi::future<void> manapi::net::http::internal::send_response_proxy(uq_handle_
346346
auto rhs = co_await cdata->worker->fwrite (cdata->conn, buffer,
347347
size, content_length <= size);
348348

349-
if (rhs < 0) {
349+
if (rhs < 0)
350350
co_return -1;
351-
}
352351

353352
content_length -= rhs;
354353
co_return rhs;
@@ -452,22 +451,28 @@ void manapi::net::http::internal::send_response_sync_cb(uq_handle_data_t cdata,
452451
}
453452

454453
if (result && *result >= 0) {
455-
const ssize_t reserved = res->config()->buffer_size;
456454
auto cb_sync = std::make_unique<http::response::resp_callback_sync>(std::move(res->callback_sync()));
457-
manapi::async::run ([res = std::move(res), cb_sync = std::move(cb_sync), reserved, cdata = std::move(cdata)] () mutable
455+
manapi::async::run ([res = std::move(res), cb_sync = std::move(cb_sync), cdata = std::move(cdata)] () mutable
458456
-> manapi::future<> {
459-
// TODO: speed up
460-
std::string buffer;
461-
buffer.reserve(reserved);
457+
auto buffer = manapi::async::current()->memory_fabric().buffer (res->config()->buffer_size);
462458

463459
bool finish = false;
460+
std::size_t cursor = 0;
464461

465462
while (!finish) {
466-
auto rhs = cb_sync->operator()(buffer.data(), reserved, finish);
463+
auto rhs = cb_sync->operator()(buffer.data() + cursor, buffer.size() - cursor, finish);
467464
if (rhs < 0) {
468465
THROW_MANAPIHTTP_EXCEPTION2(ERR_INVALID_ARGUMENT, "The callback returned an invalid length");
469466
}
470-
co_await cdata->worker->fwrite(cdata->conn, buffer.data(), rhs, finish);
467+
rhs = co_await cdata->worker->write(cdata->conn, buffer.data() + cursor, rhs, finish);
468+
469+
if (rhs <= 0)
470+
co_return;
471+
472+
cursor += rhs;
473+
474+
if (buffer.size() == cursor)
475+
cursor = 0;
471476
}
472477
});
473478
}
@@ -526,25 +531,27 @@ void manapi::net::http::internal::send_response_async_cb(uq_handle_data_t cdata,
526531
}
527532

528533
if (result && *result >= 0) {
529-
auto reserved = res->config()->buffer_size;
530534
auto cb_async = std::make_unique<http::response::resp_callback_async>(std::move(res->callback_async()));
531-
manapi::async::run ([reserved, cb_async = std::move(cb_async), cdata = std::move(cdata)] () mutable
535+
manapi::async::run ([res = std::move(res), cb_async = std::move(cb_async), cdata = std::move(cdata)] () mutable
532536
-> manapi::future<> {
533-
// TODO: speed up
534-
std::string buffer;
535-
buffer.reserve(reserved);
536-
537+
auto buffer = manapi::async::current()->memory_fabric().buffer(res->config()->buffer_size);
537538

539+
std::size_t cursor = 0;
538540
bool finish = false;
539541

540542
while (!finish) {
541-
auto rhs = co_await cb_async->operator()(buffer.data(), reserved, finish);
542-
if (rhs < 0) {
543+
auto rhs = co_await cb_async->operator()(buffer.data() + cursor, buffer.size() - cursor, finish);
544+
if (rhs < 0)
543545
THROW_MANAPIHTTP_EXCEPTION2(ERR_INVALID_ARGUMENT, "The callback returned an invalid length");
544-
}
545-
if (rhs != co_await cdata->worker->fwrite(cdata->conn, buffer.data(), rhs, finish)) {
546-
THROW_MANAPIHTTP_EXCEPTION2(ERR_ABORTED, "Write failed");
547-
}
546+
547+
rhs = co_await cdata->worker->write(cdata->conn, buffer.data() + cursor, rhs, finish);
548+
if (rhs <= 0)
549+
co_return;
550+
551+
cursor += rhs;
552+
553+
if (cursor == buffer.size())
554+
cursor = 0;
548555
}
549556
});
550557
}

src/worker/TCP.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -507,6 +507,8 @@ int manapi::net::worker::TCP::event_flags(const shared_conn & conn, int flags) {
507507

508508
flush_read_ (conn, data);
509509

510+
}
511+
if (status & ev::READ) {
510512
if (!data->watcher->is_active()) {
511513
assert(!data->watcher->read_start());
512514
}

src/worker/TLS.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,8 @@ int manapi::net::worker::TLS::event_flags(const shared_conn & conn, int flags) n
175175

176176
flush_read_ (conn, data);
177177

178-
if (!(status & (CONN_CLOSED|CONN_REMOVED)) && !data->watcher->is_active()) {
178+
if ((status & (CONN_READ|CONN_CLOSED|CONN_REMOVED)) == CONN_READ
179+
&& !data->watcher->is_active()) {
179180
data->watcher->read_start();
180181
}
181182
}

0 commit comments

Comments
 (0)