|
9 | 9 |
|
10 | 10 | namespace Requests { |
11 | 11 |
|
| 12 | +ErrorOr<NonnullOwnPtr<ReadStream>> ReadStream::create(int reader_fd) |
| 13 | +{ |
| 14 | +#if defined(AK_OS_WINDOWS) |
| 15 | + auto local_socket = TRY(Core::LocalSocket::adopt_fd(reader_fd)); |
| 16 | + auto notifier = local_socket->notifier(); |
| 17 | + VERIFY(notifier); |
| 18 | + return adopt_own(*new ReadStream(move(local_socket), notifier.release_nonnull())); |
| 19 | +#else |
| 20 | + auto file = TRY(Core::File::adopt_fd(reader_fd, Core::File::OpenMode::Read)); |
| 21 | + auto notifier = Core::Notifier::construct(reader_fd, Core::Notifier::Type::Read); |
| 22 | + return adopt_own(*new ReadStream(move(file), move(notifier))); |
| 23 | +#endif |
| 24 | +} |
| 25 | + |
12 | 26 | Request::Request(RequestClient& client, i32 request_id) |
13 | 27 | : m_client(client) |
14 | 28 | , m_request_id(request_id) |
@@ -37,11 +51,11 @@ void Request::set_request_fd(Badge<Requests::RequestClient>, int fd) |
37 | 51 | VERIFY(m_fd == -1); |
38 | 52 | m_fd = fd; |
39 | 53 |
|
40 | | - auto notifier = Core::Notifier::construct(fd, Core::Notifier::Type::Read); |
41 | | - auto stream = MUST(Core::File::adopt_fd(fd, Core::File::OpenMode::Read)); |
| 54 | + auto read_stream = MUST(ReadStream::create(fd)); |
| 55 | + auto notifier = read_stream->notifier(); |
42 | 56 | notifier->on_activation = move(m_internal_stream_data->read_notifier->on_activation); |
43 | | - m_internal_stream_data->read_notifier = move(notifier); |
44 | | - m_internal_stream_data->read_stream = move(stream); |
| 57 | + m_internal_stream_data->read_notifier = notifier; |
| 58 | + m_internal_stream_data->read_stream = move(read_stream); |
45 | 59 | } |
46 | 60 |
|
47 | 61 | void Request::set_buffered_request_finished_callback(BufferedRequestFinished on_buffered_request_finished) |
@@ -117,7 +131,7 @@ void Request::set_up_internal_stream_data(DataReceived on_data_available) |
117 | 131 | m_internal_stream_data = make<InternalStreamData>(); |
118 | 132 | m_internal_stream_data->read_notifier = Core::Notifier::construct(fd(), Core::Notifier::Type::Read); |
119 | 133 | if (fd() != -1) |
120 | | - m_internal_stream_data->read_stream = MUST(Core::File::adopt_fd(fd(), Core::File::OpenMode::Read)); |
| 134 | + m_internal_stream_data->read_stream = MUST(ReadStream::create(fd())); |
121 | 135 |
|
122 | 136 | auto user_on_finish = move(on_finish); |
123 | 137 | on_finish = [this](auto total_size, auto const& timing_info, auto network_error) { |
|
0 commit comments