Serenity Operating System
at master 88 lines 2.3 kB view raw
1/* 2 * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org> 3 * Copyright (c) 2022, the SerenityOS developers. 4 * 5 * SPDX-License-Identifier: BSD-2-Clause 6 */ 7 8#include <AK/Debug.h> 9#include <LibCore/NetworkJob.h> 10#include <LibCore/NetworkResponse.h> 11 12namespace Core { 13 14NetworkJob::NetworkJob(Stream& output_stream) 15 : m_output_stream(output_stream) 16{ 17} 18 19void NetworkJob::start(Core::Socket&) 20{ 21} 22 23void NetworkJob::shutdown(ShutdownMode) 24{ 25} 26 27void NetworkJob::did_finish(NonnullRefPtr<NetworkResponse>&& response) 28{ 29 if (is_cancelled()) 30 return; 31 32 // NOTE: We protect ourselves here, since the on_finish callback may otherwise 33 // trigger destruction of this job somehow. 34 NonnullRefPtr<NetworkJob> protector(*this); 35 36 m_response = move(response); 37 dbgln_if(NETWORKJOB_DEBUG, "{} job did_finish", *this); 38 VERIFY(on_finish); 39 on_finish(true); 40 shutdown(ShutdownMode::DetachFromSocket); 41} 42 43void NetworkJob::did_fail(Error error) 44{ 45 if (is_cancelled()) 46 return; 47 48 // NOTE: We protect ourselves here, since the on_finish callback may otherwise 49 // trigger destruction of this job somehow. 50 NonnullRefPtr<NetworkJob> protector(*this); 51 52 m_error = error; 53 dbgln_if(NETWORKJOB_DEBUG, "{}{{{:p}}} job did_fail! error: {} ({})", class_name(), this, (unsigned)error, to_string(error)); 54 VERIFY(on_finish); 55 on_finish(false); 56 shutdown(ShutdownMode::DetachFromSocket); 57} 58 59void NetworkJob::did_progress(Optional<u32> total_size, u32 downloaded) 60{ 61 if (is_cancelled()) 62 return; 63 64 // NOTE: We protect ourselves here, since the callback may otherwise 65 // trigger destruction of this job somehow. 66 NonnullRefPtr<NetworkJob> protector(*this); 67 68 if (on_progress) 69 on_progress(total_size, downloaded); 70} 71 72char const* to_string(NetworkJob::Error error) 73{ 74 switch (error) { 75 case NetworkJob::Error::ProtocolFailed: 76 return "ProtocolFailed"; 77 case NetworkJob::Error::ConnectionFailed: 78 return "ConnectionFailed"; 79 case NetworkJob::Error::TransmissionFailed: 80 return "TransmissionFailed"; 81 case NetworkJob::Error::Cancelled: 82 return "Cancelled"; 83 default: 84 return "(Unknown error)"; 85 } 86} 87 88}